--- miscJava/Test3/src/dk/thoerup/websocket/AnnotatedSocket.java 2014/02/11 10:02:13 2112 +++ miscJava/Test3/src/dk/thoerup/websocket/AnnotatedSocket.java 2014/02/11 12:44:13 2113 @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.HashMap; +import java.util.Random; import javax.websocket.CloseReason; import javax.websocket.EndpointConfig; @@ -16,11 +17,26 @@ @ServerEndpoint("/wstest") public class AnnotatedSocket { static private HashMap sessions = new HashMap(); + static private HashMap sessionNicks = new HashMap(); + + private static Random rand = new Random(); @OnOpen public void open(Session session, EndpointConfig conf) { + String guestNick = "Guest-" + rand.nextInt(); + + broadcastMessage(guestNick + " has joined the chat"); + try { + session.getBasicRemote().sendText( "Welcome " + guestNick); + } catch (IOException e) { + System.out.println("Error sending welcome messages " + e.getMessage() ); + } + + + sessionNicks.put(session.getId(), guestNick); sessions.put(session.getId(), session); + } @OnError @@ -30,18 +46,43 @@ @OnClose public void close(Session session, CloseReason reason) { sessions.remove(session.getId()); + sessionNicks.remove(session.getId()); } @OnMessage public void onMessage(Session session, String msg) { + String parts[] = msg.split("#", 2); + String cmd = parts[0]; + + + switch (cmd) { + case "CHAT": + String messagePart = parts[1]; + String nick = sessionNicks.get(session.getId() ); + broadcastMessage(nick + "> " + messagePart); + break; + + case "NICK": + String oldNick = sessionNicks.get( session.getId() ); + String newNick = parts[1]; + + sessionNicks.put(session.getId(), newNick); + + broadcastMessage( "*** " + oldNick + " switched nick to " + newNick); + break; + } + } + + private void broadcastMessage(String msg) { try { for(Session ses: sessions.values() ) { - ses.getBasicRemote().sendText( session.getId() + " > " + msg); + ses.getBasicRemote().sendText( msg); } - System.out.println("Returned msg: " + msg); } catch (IOException e) { - System.out.println("Error returning message " + e.getMessage() ); - } + System.out.println("Error broadcasting message " + e.getMessage() ); + } } + + }