package mock;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import play.mvc.WebSocket;
import javax.annotation.concurrent.ThreadSafe;
import java.io.IOException;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
/**
* Credits: http://vlkan.com/blog/post/2014/08/07/testing-websockets-in-play/
*/
@ThreadSafe
class MockOutputWebSocket {
private final static ObjectMapper objectMapper = new ObjectMapper();
protected final BlockingQueue<JsonNode> messageQueue = new LinkedBlockingQueue<>();
protected final WebSocket.Out<JsonNode> outputSocket = new WebSocket.Out<JsonNode>() {
@Override
public void write(JsonNode frame) { messageQueue.add(frame); }
@Override
public void close() {
try { messageQueue.add(objectMapper.readTree("{\"closed\": true}")); }
// This should not happen.
catch (IOException e) { throw new RuntimeException(e); }
}
};
public BlockingQueue<JsonNode> getMessageQueue() { return messageQueue; }
public WebSocket.Out<JsonNode> getOutputSocket() { return outputSocket; }
}