package com.qianwen.core.websocket.config; import cn.hutool.json.JSONUtil; import java.io.IOException; import java.util.Collection; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.qianwen.core.tool.utils.Func; import com.qianwen.core.websocket.holder.WebSocketSessionHolder; import com.qianwen.core.websocket.message.JsonWebSocketMessage; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; public class WebSocketMessageSender { private static final Logger log = LoggerFactory.getLogger(WebSocketMessageSender.class); public static void broadcast(String message) { Collection sessions = WebSocketSessionHolder.getSessions(); for (WebSocketSession session : sessions) { send(session, message); } } public static boolean send(Object sessionKey, String message) { Set session = WebSocketSessionHolder.getSession(sessionKey); if (Func.isEmpty(session)) { log.info("[send] 当前 sessionKey:{} 对应 session 不在本服务中", sessionKey); return false; } session.forEach(item -> { send(item, message); }); return true; } public static void send(WebSocketSession session, JsonWebSocketMessage message) { send(session, JSONUtil.toJsonStr(message)); } public static boolean send(WebSocketSession session, String message) { if (session == null) { log.error("[send] session 为 null"); return false; } else if (!session.isOpen()) { log.error("[send] session 已经关闭"); return false; } else { try { synchronized (session) { session.sendMessage(new TextMessage(message)); } return true; } catch (IOException e) { log.error("[send] session({}) 发送消息({}) 异常", new Object[]{session, message, e}); return false; } } } }