package xin.merlin.myplayerbackend.utils.websocket; import org.springframework.stereotype.Component; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @Component public class WebSocketSessionManager { private static final Map websocketSessions = new ConcurrentHashMap<>(); public void addSession(Integer id, WebSocketSession session) {websocketSessions.put(id, session);} public WebSocketSession getSession(Integer id) {return websocketSessions.get(id);} public void removeSession(Integer id) {websocketSessions.remove(id);} public Map getSessions() {return websocketSessions;} public void sendToUser(Integer userId, String message) throws IOException { WebSocketSession session = websocketSessions.get(userId); if (session != null && session.isOpen()) { session.sendMessage(new TextMessage(message)); } } public void broadcast(String message) throws IOException { for (WebSocketSession session : websocketSessions.values()) { if (session.isOpen()) { session.sendMessage(new TextMessage(message)); } } } public void closeAll() { websocketSessions.forEach((uid, session) -> { try { session.close(CloseStatus.GOING_AWAY); } catch (Exception ignored) {} }); } }