summaryrefslogtreecommitdiffstats
path: root/simple/simple-http/src/test/java/org/simpleframework/http/socket/WebSocketChatRoom.java
diff options
context:
space:
mode:
Diffstat (limited to 'simple/simple-http/src/test/java/org/simpleframework/http/socket/WebSocketChatRoom.java')
-rw-r--r--simple/simple-http/src/test/java/org/simpleframework/http/socket/WebSocketChatRoom.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/simple/simple-http/src/test/java/org/simpleframework/http/socket/WebSocketChatRoom.java b/simple/simple-http/src/test/java/org/simpleframework/http/socket/WebSocketChatRoom.java
new file mode 100644
index 0000000..6ca855a
--- /dev/null
+++ b/simple/simple-http/src/test/java/org/simpleframework/http/socket/WebSocketChatRoom.java
@@ -0,0 +1,86 @@
+package org.simpleframework.http.socket;
+
+import java.io.File;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import org.simpleframework.http.Cookie;
+import org.simpleframework.http.Request;
+import org.simpleframework.http.socket.WebSocketCertificate.KeyStoreReader;
+import org.simpleframework.http.socket.service.Service;
+import org.simpleframework.transport.trace.TraceAnalyzer;
+
+public class WebSocketChatRoom extends Thread implements Service {
+
+ private final WebSocketChatRoomListener listener;
+ private final Map<String, FrameChannel> sockets;
+ private final Set<String> users;
+
+ public WebSocketChatRoom() {
+ this.listener = new WebSocketChatRoomListener(this);
+ this.sockets = new ConcurrentHashMap<String, FrameChannel>();
+ this.users = new CopyOnWriteArraySet<String>();
+ }
+
+ public void connect(Session connection) {
+ FrameChannel socket = connection.getChannel();
+ Request req = connection.getRequest();
+ Cookie user = req.getCookie("user");
+
+ if(user == null) {
+ user = new Cookie("user", "anonymous");
+ }
+ String name = user.getValue();
+
+ try {
+ socket.register(listener);
+ join(name, socket);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ public void join(String user, FrameChannel operation) {
+ sockets.put(user, operation);
+ users.add(user);
+ }
+
+ public void leave(String user, FrameChannel operation){
+ sockets.put(user, operation);
+ users.add(user);
+ }
+
+ public void distribute(Frame frame) {
+ try {
+ for(String user : users) {
+ FrameChannel operation = sockets.get(user);
+
+ try {
+
+ operation.send(frame);
+ } catch(Exception e){
+ sockets.remove(user);
+ users.remove(user);
+ e.printStackTrace();
+ operation.close();
+ }
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] list) throws Exception {
+ TraceAnalyzer agent = new WebSocketAnalyzer();
+ WebSocketChatRoom application = new WebSocketChatRoom();
+ File file = new File("C:\\work\\development\\async_http\\proxy\\yieldbroker-proxy-site\\certificate\\www.yieldbroker.com.pfx");
+ KeyStoreReader reader = new KeyStoreReader(WebSocketCertificate.KeyStoreType.PKCS12, file, "p", "p");
+ WebSocketCertificate certificate = new WebSocketCertificate(reader, WebSocketCertificate.SecureProtocol.TLS);
+ WebSocketChatApplication container = new WebSocketChatApplication(application, certificate, agent, 6060);
+ application.start();
+ container.connect();
+ }
+}