1package fi.iki.elonen;
2
3
4public class NanoWebSocketServer extends NanoHTTPD implements IWebSocketFactory {
5    public static final String MISSING_FACTORY_MESSAGE = "You must either override this method or supply a WebSocketFactory in the constructor";
6
7    private final WebSocketResponseHandler responseHandler;
8
9    public NanoWebSocketServer(int port) {
10        super(port);
11        responseHandler = new WebSocketResponseHandler(this);
12    }
13
14    public NanoWebSocketServer(String hostname, int port) {
15        super(hostname, port);
16        responseHandler = new WebSocketResponseHandler(this);
17    }
18
19    public NanoWebSocketServer(int port, IWebSocketFactory webSocketFactory) {
20        super(port);
21        responseHandler = new WebSocketResponseHandler(webSocketFactory);
22    }
23
24    public NanoWebSocketServer(String hostname, int port, IWebSocketFactory webSocketFactory) {
25        super(hostname, port);
26        responseHandler = new WebSocketResponseHandler(webSocketFactory);
27    }
28
29    @Override
30    public Response serve(IHTTPSession session) {
31        Response candidate = responseHandler.serve(session);
32        return candidate == null ? super.serve(session) : candidate;
33    }
34
35    public WebSocket openWebSocket(IHTTPSession handshake) {
36        throw new Error(MISSING_FACTORY_MESSAGE);
37    }
38}
39
40