From 42ff2a9f759c4e28e7040a919a3940b417cc0f4e Mon Sep 17 00:00:00 2001 From: yankee Date: Thu, 24 Apr 2014 18:34:27 +0200 Subject: Added WebSocketFactory as alternative to deriving from NanoWebSocketServer --- .../java/fi/iki/elonen/NanoWebSocketServer.java | 23 ++++++++++++++++++++-- .../main/java/fi/iki/elonen/WebSocketFactory.java | 7 +++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 websocket/src/main/java/fi/iki/elonen/WebSocketFactory.java (limited to 'websocket/src') diff --git a/websocket/src/main/java/fi/iki/elonen/NanoWebSocketServer.java b/websocket/src/main/java/fi/iki/elonen/NanoWebSocketServer.java index 7a5e588..21bc7f0 100644 --- a/websocket/src/main/java/fi/iki/elonen/NanoWebSocketServer.java +++ b/websocket/src/main/java/fi/iki/elonen/NanoWebSocketServer.java @@ -6,7 +6,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Map; -public abstract class NanoWebSocketServer extends NanoHTTPD { +public class NanoWebSocketServer extends NanoHTTPD implements WebSocketFactory { public static final String HEADER_UPGRADE = "upgrade"; public static final String HEADER_UPGRADE_VALUE = "websocket"; public static final String HEADER_CONNECTION = "connection"; @@ -18,13 +18,27 @@ public abstract class NanoWebSocketServer extends NanoHTTPD { public static final String HEADER_WEBSOCKET_PROTOCOL = "sec-websocket-protocol"; public final static String WEBSOCKET_KEY_MAGIC = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; + + private final WebSocketFactory webSocketFactory; public NanoWebSocketServer(int port) { super(port); + webSocketFactory = null; } public NanoWebSocketServer(String hostname, int port) { super(hostname, port); + webSocketFactory = null; + } + + public NanoWebSocketServer(int port, WebSocketFactory webSocketFactory) { + super(port); + this.webSocketFactory = webSocketFactory; + } + + public NanoWebSocketServer(String hostname, int port,WebSocketFactory webSocketFactory) { + super(hostname, port); + this.webSocketFactory = webSocketFactory; } @Override @@ -57,7 +71,12 @@ public abstract class NanoWebSocketServer extends NanoHTTPD { } } - protected abstract WebSocket openWebSocket(IHTTPSession handshake); + public WebSocket openWebSocket(IHTTPSession handshake) { + if (webSocketFactory == null) { + throw new Error("You must either override this method or supply a WebSocketFactory in the cosntructor"); + } + return webSocketFactory.openWebSocket(handshake); + } protected boolean isWebsocketRequested(IHTTPSession session) { Map headers = session.getHeaders(); diff --git a/websocket/src/main/java/fi/iki/elonen/WebSocketFactory.java b/websocket/src/main/java/fi/iki/elonen/WebSocketFactory.java new file mode 100644 index 0000000..4a4be16 --- /dev/null +++ b/websocket/src/main/java/fi/iki/elonen/WebSocketFactory.java @@ -0,0 +1,7 @@ +package fi.iki.elonen; + +import fi.iki.elonen.NanoHTTPD.IHTTPSession; + +public interface WebSocketFactory { + WebSocket openWebSocket(IHTTPSession handshake); +} -- cgit v1.2.3