1package fi.iki.elonen.samples.echo;
2
3import fi.iki.elonen.NanoHTTPD;
4import fi.iki.elonen.WebSocket;
5import fi.iki.elonen.WebSocketFrame;
6
7import java.io.IOException;
8
9/**
10* @author Paul S. Hawke (paul.hawke@gmail.com)
11*         On: 4/23/14 at 10:34 PM
12*/
13class 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