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

Diff of /miscJava/Test3/src/dk/thoerup/websocket/AnnotatedSocket.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2107 by torben, Tue Feb 11 08:33:52 2014 UTC revision 2115 by torben, Tue Feb 11 12:54:19 2014 UTC
# Line 2  package dk.thoerup.websocket; Line 2  package dk.thoerup.websocket;
2    
3  import java.io.IOException;  import java.io.IOException;
4  import java.util.HashMap;  import java.util.HashMap;
5    import java.util.Random;
6    
7  import javax.websocket.CloseReason;  import javax.websocket.CloseReason;
8  import javax.websocket.EndpointConfig;  import javax.websocket.EndpointConfig;
# Line 16  import javax.websocket.server.ServerEndp Line 17  import javax.websocket.server.ServerEndp
17  @ServerEndpoint("/wstest")  @ServerEndpoint("/wstest")
18  public class AnnotatedSocket {  public class AnnotatedSocket {
19          static private HashMap<String, Session> sessions = new HashMap<String,Session>();          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          @OnOpen
26          public void open(Session session, EndpointConfig conf) {          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);                          sessions.put(session.getId(), session);        
47                    
48          }          }
49                    
50          @OnError          @OnError
# Line 29  public class AnnotatedSocket { Line 53  public class AnnotatedSocket {
53                    
54          @OnClose          @OnClose
55          public void close(Session session, CloseReason reason) {          public void close(Session session, CloseReason reason) {
56                    
57                    String nick = sessionNicks.get( session.getId() );
58                    
59                  sessions.remove(session.getId());                  sessions.remove(session.getId());
60                    sessionNicks.remove(session.getId());
61                    
62                    broadcastMessage( "*** " + nick + " has left the chat");
63          }          }
64                    
65    
66          @OnMessage          @OnMessage
67          public void onMessage(Session session, String msg) {          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 {                  try {
92                          for(Session ses: sessions.values() ) {                          for(Session ses: sessions.values() ) {
93                                  ses.getBasicRemote().sendText( session.getId() + " > " + msg);                                                            ses.getBasicRemote().sendText( msg);                            
94                          }                          }
                         System.out.println("Returned msg: " + msg);  
95                  } catch (IOException e) {                  } catch (IOException e) {
96                          System.out.println("Error returning message " + e.getMessage() );                          System.out.println("Error broadcasting message " + e.getMessage() );
97                  }                  }              
98          }          }
99            
100            
101  }  }

Legend:
Removed from v.2107  
changed lines
  Added in v.2115

  ViewVC Help
Powered by ViewVC 1.1.20