package vlove.virt.agent; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import jline.console.ConsoleReader; import org.springframework.stereotype.Component; import com.ning.http.client.websocket.WebSocket; import com.ning.http.client.websocket.WebSocketTextListener; @Component public class AgentWebSocketListener implements WebSocketTextListener { private final AgentSocketCallback callback; private final ConsoleReader reader; private AgentWebSocketMessageHandler handler = new AgentWebSocketMessageHandler(); public AgentWebSocketListener(AgentSocketCallback callback, ConsoleReader reader) { this.callback = callback; this.reader = reader; } @Override public void onOpen(WebSocket websocket) { try { reader.println("WebSocket connection established."); reader.flush(); callback.onOpen(websocket); handler.setWebSocket(websocket); } catch (IOException e) { // empty } } @Override public void onClose(WebSocket websocket) { try { reader.println("WebSocket connection terminated."); reader.flush(); callback.onClose(); } catch (IOException e) { // empty } } @Override public void onError(Throwable t) { try { StringWriter sw = new StringWriter(); t.printStackTrace(new PrintWriter(sw)); reader.println("Error occured in WebSocket communication. " + t.getMessage() + sw.toString()); reader.flush(); callback.onError(); } catch (IOException e) { // empty } } @Override public void onMessage(String message) { try { reader.println("Message from server: " + message); reader.flush(); handler.onMessage(message); } catch (IOException e) { // empty } } @Override public void onFragment(String fragment, boolean last) { // empty } }