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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2516 - (hide annotations) (download)
Mon Apr 27 15:41:43 2015 UTC (9 years, 1 month ago) by torben
File size: 2625 byte(s)
forked test3 to test4 with out the advanced ejb stuff etc
1 torben 2516 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