@ServerEndpoint(value = "/websocket")
public class WebSocket {
private Logger logger = Logger.getLogger(this.getClass().getName());
static Map<String,Session> sessionMap = new HashMap<String,Session>();
@OnOpen
public void onOpen(Session session) {
sessionMap.put(session.getId(), session);
}
@OnMessage
public void onMessage(String unscrambledWord, Session session) {
broadcastAll("message",unscrambledWord);
}
/**
* @param message
*/
public static void broadcastAll(String type,String message){
Set<Map.Entry<String,Session>> set = sessionMap.entrySet();
for(Map.Entry<String,Session> i: set){
try {
i.getValue().getBasicRemote().sendText("{type:'"+type+"',text:'"+message+"'}");
} catch (Exception e) {
e.printStackTrace();
}
}
}
@OnClose
public void onClose(Session session, CloseReason closeReason) {
sessionMap.remove(session.getId());
logger.info(String.format("Session %s closed because of %s", session.getId(), closeReason));
}
@OnError
public void error(Session session, Throwable throwable){
sessionMap.remove(session.getId());
System.err.println("session "+session.getId()+" error:"+throwable);
}
}