1 package fi.iki.elonen.samples.echo; 2 3 import fi.iki.elonen.NanoHTTPD; 4 import fi.iki.elonen.WebSocket; 5 import fi.iki.elonen.WebSocketFrame; 6 7 import java.io.IOException; 8 9 /** 10 * @author Paul S. Hawke (paul.hawke (at) gmail.com) 11 * On: 4/23/14 at 10:34 PM 12 */ 13 class DebugWebSocket extends WebSocket { 14 private final boolean debug; 15 16 public DebugWebSocket(NanoHTTPD.IHTTPSession handshake, boolean debug) { 17 super(handshake); 18 this.debug = debug; 19 } 20 21 @Override 22 protected void onPong(WebSocketFrame pongFrame) { 23 if (debug) { 24 System.out.println("P " + pongFrame); 25 } 26 } 27 28 @Override 29 protected void onMessage(WebSocketFrame messageFrame) { 30 try { 31 messageFrame.setUnmasked(); 32 sendFrame(messageFrame); 33 } catch (IOException e) { 34 throw new RuntimeException(e); 35 } 36 } 37 38 @Override 39 protected void onClose(WebSocketFrame.CloseCode code, String reason, boolean initiatedByRemote) { 40 if (debug) { 41 System.out.println("C [" + (initiatedByRemote ? "Remote" : "Self") + "] " + 42 (code != null ? code : "UnknownCloseCode[" + code + "]") + 43 (reason != null && !reason.isEmpty() ? ": " + reason : "")); 44 } 45 } 46 47 @Override 48 protected void onException(IOException e) { 49 e.printStackTrace(); 50 } 51 52 @Override 53 protected void handleWebsocketFrame(WebSocketFrame frame) throws IOException { 54 if (debug) { 55 System.out.println("R " + frame); 56 } 57 super.handleWebsocketFrame(frame); 58 } 59 60 @Override 61 public synchronized void sendFrame(WebSocketFrame frame) throws IOException { 62 if (debug) { 63 System.out.println("S " + frame); 64 } 65 super.sendFrame(frame); 66 } 67 } 68