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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2115 - (hide annotations) (download)
Tue Feb 11 12:54:19 2014 UTC (10 years, 3 months ago) by torben
File size: 2615 byte(s)
A bit more basic chat functionality
1 torben 2107 package dk.thoerup.websocket;
2    
3     import java.io.IOException;
4     import java.util.HashMap;
5 torben 2113 import java.util.Random;
6 torben 2107
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 torben 2113 static private HashMap<String, String> sessionNicks = new HashMap<String,String>();
21 torben 2107
22 torben 2113 private static Random rand = new Random();
23 torben 2107
24 torben 2113
25 torben 2107 @OnOpen
26     public void open(Session session, EndpointConfig conf) {
27 torben 2113 String guestNick = "Guest-" + rand.nextInt();
28    
29     broadcastMessage(guestNick + " has joined the chat");
30     try {
31     session.getBasicRemote().sendText( "Welcome " + guestNick);
32 torben 2115 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 torben 2113 } catch (IOException e) {
41     System.out.println("Error sending welcome messages " + e.getMessage() );
42     }
43    
44    
45     sessionNicks.put(session.getId(), guestNick);
46 torben 2107 sessions.put(session.getId(), session);
47 torben 2113
48 torben 2107 }
49    
50     @OnError
51     public void error(Session session, Throwable error) {
52     }
53    
54     @OnClose
55     public void close(Session session, CloseReason reason) {
56 torben 2115
57     String nick = sessionNicks.get( session.getId() );
58    
59 torben 2107 sessions.remove(session.getId());
60 torben 2113 sessionNicks.remove(session.getId());
61 torben 2115
62     broadcastMessage( "*** " + nick + " has left the chat");
63 torben 2107 }
64    
65    
66     @OnMessage
67     public void onMessage(Session session, String msg) {
68 torben 2113 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 torben 2107 try {
92     for(Session ses: sessions.values() ) {
93 torben 2113 ses.getBasicRemote().sendText( msg);
94 torben 2107 }
95     } catch (IOException e) {
96 torben 2113 System.out.println("Error broadcasting message " + e.getMessage() );
97     }
98 torben 2107 }
99 torben 2113
100    
101 torben 2107 }

  ViewVC Help
Powered by ViewVC 1.1.20