JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
Spring-MVCの散歩道 > 応用の森(Spring-MVC編) > WebSocket(ライン風)サンプル

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()));

        }
    }
}