/[projects]/miscJava/Test4Simple/src/main/java/dk/thoerup/websocket/AnnotatedSocket.java
ViewVC logotype

Contents of /miscJava/Test4Simple/src/main/java/dk/thoerup/websocket/AnnotatedSocket.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2516 - (show annotations) (download)
Mon Apr 27 15:41:43 2015 UTC (9 years ago) by torben
File size: 2625 byte(s)
forked test3 to test4 with out the advanced ejb stuff etc
1 package dk.thoerup.websocket;
2
3 import java.io.IOException;
4 import java.util.HashMap;
5 import java.util.Random;
6
7 import javax.websocket.CloseReason;
8 import javax.websocket.EndpointConfig;
9 import javax.websocket.OnClose;
10 import javax.websocket.OnError;
11 import javax.websocket.OnMessage;
12 import javax.websocket.OnOpen;
13 import javax.websocket.Session;
14 import javax.websocket.server.ServerEndpoint;
15
16
17 @ServerEndpoint("/wstest")
18 public class AnnotatedSocket {
19 static private HashMap<String, Session> sessions = new HashMap<String,Session>();
20 static private HashMap<String, String> sessionNicks = new HashMap<String,String>();
21
22 private static Random rand = new Random();
23
24
25 @OnOpen
26 public void open(Session session, EndpointConfig conf) {
27 String guestNick = "Guest-" + rand.nextInt();
28
29 broadcastMessage( "*** " + guestNick + " has joined the chat");
30 try {
31 session.getBasicRemote().sendText( "Welcome " + guestNick);
32 StringBuilder sb = new StringBuilder();
33
34 for(String n : sessionNicks.values() ) {
35 sb.append(n).append(" ");
36 }
37 session.getBasicRemote().sendText( "*** On-line guests: " + sb.toString() );
38
39
40 } catch (IOException e) {
41 System.out.println("Error sending welcome messages " + e.getMessage() );
42 }
43
44
45 sessionNicks.put(session.getId(), guestNick);
46 sessions.put(session.getId(), session);
47
48 }
49
50 @OnError
51 public void error(Session session, Throwable error) {
52 }
53
54 @OnClose
55 public void close(Session session, CloseReason reason) {
56
57 String nick = sessionNicks.get( session.getId() );
58
59 sessions.remove(session.getId());
60 sessionNicks.remove(session.getId());
61
62 broadcastMessage( "*** " + nick + " has left the chat");
63 }
64
65
66 @OnMessage
67 public void onMessage(Session session, String msg) {
68 String parts[] = msg.split("#", 2);
69 String cmd = parts[0];
70
71
72 switch (cmd) {
73 case "CHAT":
74 String messagePart = parts[1];
75 String nick = sessionNicks.get(session.getId() );
76 broadcastMessage(nick + "> " + messagePart);
77 break;
78
79 case "NICK":
80 String oldNick = sessionNicks.get( session.getId() );
81 String newNick = parts[1];
82
83 sessionNicks.put(session.getId(), newNick);
84
85 broadcastMessage( "*** " + oldNick + " switched nick to " + newNick);
86 break;
87 }
88 }
89
90 private void broadcastMessage(String msg) {
91 try {
92 for(Session ses: sessions.values() ) {
93 ses.getBasicRemote().sendText( msg);
94 }
95 } catch (IOException e) {
96 System.out.println("Error broadcasting message " + e.getMessage() );
97 }
98 }
99
100
101 }

  ViewVC Help
Powered by ViewVC 1.1.20