From b543b2f94d09658a276e3a77d3091e1ec32360f9 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Sun, 18 May 2025 20:50:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(messaging/websocket):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../websocket/dao/WebSocketSessionDao.java | 9 +++++++++ .../dao/WebSocketSessionDaoDefaultImpl.java | 6 ++++++ .../messaging/websocket/util/WebSocketUtils.java | 15 +++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/dao/WebSocketSessionDao.java b/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/dao/WebSocketSessionDao.java index 0726a045..2d7ddb72 100644 --- a/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/dao/WebSocketSessionDao.java +++ b/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/dao/WebSocketSessionDao.java @@ -19,6 +19,7 @@ package top.continew.starter.messaging.websocket.dao; import org.springframework.web.socket.WebSocketSession; import java.util.Collection; +import java.util.Set; /** * WebSocket 会话 DAO @@ -58,4 +59,12 @@ public interface WebSocketSessionDao { * @since 2.12.1 */ Collection listAll(); + + /** + * 获取所有会话 ID + * + * @return 所有会话 ID + * @since 2.12.1 + */ + Set listAllSessionIds(); } diff --git a/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/dao/WebSocketSessionDaoDefaultImpl.java b/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/dao/WebSocketSessionDaoDefaultImpl.java index 3e5ed211..644dc2e8 100644 --- a/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/dao/WebSocketSessionDaoDefaultImpl.java +++ b/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/dao/WebSocketSessionDaoDefaultImpl.java @@ -20,6 +20,7 @@ import org.springframework.web.socket.WebSocketSession; import java.util.Collection; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** @@ -51,4 +52,9 @@ public class WebSocketSessionDaoDefaultImpl implements WebSocketSessionDao { public Collection listAll() { return SESSION_MAP.values(); } + + @Override + public Set listAllSessionIds() { + return SESSION_MAP.keySet(); + } } diff --git a/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/util/WebSocketUtils.java b/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/util/WebSocketUtils.java index eb085288..196818f0 100644 --- a/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/util/WebSocketUtils.java +++ b/continew-starter-messaging/continew-starter-messaging-websocket/src/main/java/top/continew/starter/messaging/websocket/util/WebSocketUtils.java @@ -16,6 +16,7 @@ package top.continew.starter.messaging.websocket.util; +import cn.hutool.core.collection.CollUtil; import cn.hutool.extra.spring.SpringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,6 +26,8 @@ import org.springframework.web.socket.WebSocketSession; import top.continew.starter.messaging.websocket.dao.WebSocketSessionDao; import java.io.IOException; +import java.util.Collection; +import java.util.List; /** * WebSocket 工具类 @@ -62,6 +65,18 @@ public class WebSocketUtils { sendMessage(session, new TextMessage(message)); } + /** + * 批量发送消息 + * + * @param clientIds 客户端 ID 列表 + * @param message 消息内容 + * @since 2.12.1 + */ + public static void sendMessage(List clientIds, String message) { + Collection sessionIds = CollUtil.intersection(SESSION_DAO.listAllSessionIds(), clientIds); + sessionIds.parallelStream().forEach(sessionId -> sendMessage(sessionId, message)); + } + /** * 发送消息给所有客户端 *