package mock;
import com.fasterxml.jackson.databind.JsonNode;
import play.libs.F;
import play.mvc.WebSocket;
import javax.annotation.concurrent.ThreadSafe;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Credits: http://vlkan.com/blog/post/2014/08/07/testing-websockets-in-play/
*/
@ThreadSafe
class MockInputWebSocket {
protected final List<F.Callback<JsonNode>> messageListeners = Collections.synchronizedList(new ArrayList<F.Callback<JsonNode>>());
protected final List<F.Callback0> closeListeners = Collections.synchronizedList(new ArrayList<F.Callback0>());
protected final WebSocket.In<JsonNode> inputSocket = new WebSocket.In<JsonNode>() {
@Override
public void onMessage(F.Callback<JsonNode> callback) { messageListeners.add(callback); }
@Override
public void onClose(F.Callback0 callback) { closeListeners.add(callback); }
};
public void write(JsonNode data) throws Throwable {
for (F.Callback<JsonNode> listener : messageListeners)
listener.invoke(data);
}
public void close() throws Throwable {
for (F.Callback0 listener : closeListeners)
listener.invoke();
}
public WebSocket.In<JsonNode> getInputSocket() { return inputSocket; }
}