package com.jgoetsch.eventtrader.source; import java.io.IOException; import java.io.Reader; import org.atmosphere.wasync.Client; import org.atmosphere.wasync.ClientFactory; import org.atmosphere.wasync.Function; import org.atmosphere.wasync.Request; import org.atmosphere.wasync.RequestBuilder; import org.atmosphere.wasync.Socket; import org.atmosphere.wasync.impl.AtmosphereClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class WebSocketMsgSource extends UrlBasedMsgSource { private Logger log = LoggerFactory.getLogger(getClass()); private String initialMessage; @Override protected void receiveMsgs() { Client client = ClientFactory.getDefault().newClient(); RequestBuilder request = client.newRequestBuilder() .method(Request.METHOD.GET) .uri(getUrl()) .transport(Request.TRANSPORT.WEBSOCKET); try { Socket socket = client.create(); socket.on(new Function<String>() { public void on(String r) { log.info("Received: " + r); } }).on(new Function<IOException>() { public void on(IOException t) { log.error("IO error in websocket connection", t); } }).open(request.build()); if (getInitialMessage() != null) socket.fire(getInitialMessage()); for (;;) { try { Thread.sleep(30000); } catch (InterruptedException e) {} } } catch (IOException e) { log.error("Error connecting to websocket server", e); } } public String getInitialMessage() { return initialMessage; } public void setInitialMessage(String initialMessage) { this.initialMessage = initialMessage; } }