package jp.dip.arimodoki.websocket;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import jp.dip.arimodoki.common.CConst;
public class EchoHandler extends TextWebSocketHandler implements CConst {
private Map<String, WebSocketSession> sessionMap_ = new ConcurrentHashMap<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
this.sessionMap_.put(session.getId(), session);
}
@Override
public void afterConnectionClosed(WebSocketSession session,
CloseStatus status) throws Exception {
this.sessionMap_.remove(session.getId());
}
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String myId = session.getId();
String msg = "";
for (Entry<String, WebSocketSession> entry : this.sessionMap_.entrySet()) {
String targetId = entry.getKey();
if(targetId.equals(myId)) {
msg = "<tr><td class='right blue'>" + message.getPayload() + "</td></tr>";
} else {
msg = "<tr><td class='left red'>" + message.getPayload() + "</td></tr>";
}
entry.getValue().sendMessage(new TextMessage(msg.getBytes()));
}
}
}
|