aboutsummaryrefslogtreecommitdiff
path: root/websocket
diff options
context:
space:
mode:
authoryankee <yzeugs@cipher-code.de>2014-04-24 18:34:27 +0200
committeryankee <yzeugs@cipher-code.de>2014-04-24 18:34:27 +0200
commit42ff2a9f759c4e28e7040a919a3940b417cc0f4e (patch)
tree0ce65c6bb7ee772767205efb7e5e988b4a1010a8 /websocket
parentb4360559711467cfc752e60bf424b81afcb088f5 (diff)
downloadnanohttpd-42ff2a9f759c4e28e7040a919a3940b417cc0f4e.tar.gz
Added WebSocketFactory as alternative to deriving from NanoWebSocketServer
Diffstat (limited to 'websocket')
-rw-r--r--websocket/src/main/java/fi/iki/elonen/NanoWebSocketServer.java23
-rw-r--r--websocket/src/main/java/fi/iki/elonen/WebSocketFactory.java7
2 files changed, 28 insertions, 2 deletions
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<String, String> 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);
+}