Newer
Older
CosmosServer / src / main / java / com / example / cosmos_serversb / resources / WebSocket.java
package com.example.cosmos_serversb.resources;

import org.springframework.stereotype.Component;

import javax.websocket.server.ServerEndpoint;
import java.util.HashSet;
import java.util.Set;

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;

@Component
//@ServerEndpoint("/websocket")
public class WebSocket extends TextWebSocketHandler {
    private static final Set<WebSocketSession> sessions = new HashSet<>();
    //private ConcurrentHashMap<String, Set<WebSocketSession>> roomSessionPool = new ConcurrentHashMap<>();

    public WebSocket(){

    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        sessions.add(session);
        System.out.println("session確立しました");
//        String roomName = session.getUri().getQuery();
//        roomSessionPool.compute(roomName, (key, sessions) -> {
//            if (sessions == null) {
//                sessions = new CopyOnWriteArraySet<>();
//            }
//            sessions.add(session);
//            return sessions;
//        });
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String strMessage = message.getPayload();
        TextMessage hoge;
        System.out.println("message( " + strMessage + " )を受信しました");
        session.sendMessage(message);
        for(WebSocketSession roomsSession : sessions){
            roomsSession.sendMessage(message);
        }
//        String roomName = session.getUri().getQuery();
//        for (WebSocketSession roomSession : roomSessionPool.get(roomName)) {
//            roomSession.sendMessage(message);
//        }
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        sessions.remove(session);
        System.out.println("session閉じました");
//        String roomName = session.getUri().getQuery();
//        roomSessionPool.compute(roomName, (key, sessions) -> {
//            sessions.remove(session);
//            if (sessions.isEmpty()) {
//                // 1件もない場合はMapからクリア
//                sessions = null;
//            }
//            return sessions;
//        });

    }


//    @GET
//    public String serverCheck() {
//        LogUtils.info("サーバーをチェックしています。");
//        return "{\"ServerStatus\":\"200\"}";
//    }
//    @OnOpen
//    public void onOpen(Session session) {
//        /* セッション確立時の処理 */
//        sessions.add(session);
//        System.out.println("WebSocketセッション確立");
//    }
//
//    @OnMessage
//    public String onMessage(String message) {
//        /* メッセージ受信時の処理 */
//        System.out.println("WebSocket受信:" + message);
//        return "正常にメッセージを受信しました。";
//    }
//
////    @OnMessage
////    public void onMessage(String message, Session session) throws IOException {
////        //session.getBasicRemote().sendText(message); //メッセージの送信が完了するまで待機
////        session.getAsyncRemote().sendText(message); //非同期で送信
////    }
//
//    @OnError
//    public void onError(Throwable th) {
//        /* エラー発生時の処理 */
//        System.out.println("WebSocketエラー:" + th.getMessage());
//    }
//
//    @OnClose
//    public void onClose(Session session) {
//        /* セッション解放時の処理 */
//        sessions.remove(session);
//        System.out.println("WebSocketセッションを削除");
//    }
//
//    public static void broadcast() {
//        sessions.forEach(session -> {
//            session.getAsyncRemote().sendText("Broadcast : ");
//        });
//    }
}