diff options
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.java | 86 |
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(); + } +} |