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(); 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 : "); // }); // } }