/[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 2113 - (hide annotations) (download)
Tue Feb 11 12:44:13 2014 UTC (10 years, 3 months ago) by torben
File size: 2263 byte(s)
Make it feel a bit more like a real chat app
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     } catch (IOException e) {
33     System.out.println("Error sending welcome messages " + e.getMessage() );
34     }
35    
36    
37     sessionNicks.put(session.getId(), guestNick);
38 torben 2107 sessions.put(session.getId(), session);
39 torben 2113
40 torben 2107 }
41    
42     @OnError
43     public void error(Session session, Throwable error) {
44     }
45    
46     @OnClose
47     public void close(Session session, CloseReason reason) {
48     sessions.remove(session.getId());
49 torben 2113 sessionNicks.remove(session.getId());
50 torben 2107 }
51    
52    
53     @OnMessage
54     public void onMessage(Session session, String msg) {
55 torben 2113 String parts[] = msg.split("#", 2);
56     String cmd = parts[0];
57    
58    
59     switch (cmd) {
60     case "CHAT":
61     String messagePart = parts[1];
62     String nick = sessionNicks.get(session.getId() );
63     broadcastMessage(nick + "> " + messagePart);
64     break;
65    
66     case "NICK":
67     String oldNick = sessionNicks.get( session.getId() );
68     String newNick = parts[1];
69    
70     sessionNicks.put(session.getId(), newNick);
71    
72     broadcastMessage( "*** " + oldNick + " switched nick to " + newNick);
73     break;
74     }
75     }
76    
77     private void broadcastMessage(String msg) {
78 torben 2107 try {
79     for(Session ses: sessions.values() ) {
80 torben 2113 ses.getBasicRemote().sendText( msg);
81 torben 2107 }
82     } catch (IOException e) {
83 torben 2113 System.out.println("Error broadcasting message " + e.getMessage() );
84     }
85 torben 2107 }
86 torben 2113
87    
88 torben 2107 }

  ViewVC Help
Powered by ViewVC 1.1.20