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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2113 - (show 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 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 } catch (IOException e) {
33 System.out.println("Error sending welcome messages " + e.getMessage() );
34 }
35
36
37 sessionNicks.put(session.getId(), guestNick);
38 sessions.put(session.getId(), session);
39
40 }
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 sessionNicks.remove(session.getId());
50 }
51
52
53 @OnMessage
54 public void onMessage(Session session, String msg) {
55 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 try {
79 for(Session ses: sessions.values() ) {
80 ses.getBasicRemote().sendText( msg);
81 }
82 } catch (IOException e) {
83 System.out.println("Error broadcasting message " + e.getMessage() );
84 }
85 }
86
87
88 }

  ViewVC Help
Powered by ViewVC 1.1.20