From af1f5dbeb1c5e0814cfcfa101e9a0de9499ee7a9 Mon Sep 17 00:00:00 2001 From: huangxiang <155373492@qq.com> Date: Sun, 27 Apr 2025 20:03:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/NotificationWebsocketEndpoint.java | 4 +-- .../modules/WebSocketNotificationMgrImpl.java | 31 ---------------- .../modules/WebSocketNotificationPushMgrImpl.java | 41 ++++++++++++++++++++++ .../iflytop/gd/system/modules/NotificationMgr.java | 7 ---- .../gd/system/modules/NotificationPushMgr.java | 15 ++++++++ 5 files changed, 58 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationMgrImpl.java create mode 100644 src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationPushMgrImpl.java delete mode 100644 src/main/java/com/iflytop/gd/system/modules/NotificationMgr.java create mode 100644 src/main/java/com/iflytop/gd/system/modules/NotificationPushMgr.java diff --git a/src/main/java/com/iflytop/gd/common/controller/NotificationWebsocketEndpoint.java b/src/main/java/com/iflytop/gd/common/controller/NotificationWebsocketEndpoint.java index d09e3a1..e2979c3 100644 --- a/src/main/java/com/iflytop/gd/common/controller/NotificationWebsocketEndpoint.java +++ b/src/main/java/com/iflytop/gd/common/controller/NotificationWebsocketEndpoint.java @@ -1,6 +1,6 @@ package com.iflytop.gd.common.controller; -import com.iflytop.gd.infrastructure.modules.WebSocketNotificationMgrImpl; +import com.iflytop.gd.infrastructure.modules.WebSocketNotificationPushMgrImpl; import jakarta.annotation.Resource; import jakarta.websocket.EndpointConfig; import jakarta.websocket.OnOpen; @@ -15,7 +15,7 @@ import org.springframework.stereotype.Component; public class NotificationWebsocketEndpoint { @Resource - private WebSocketNotificationMgrImpl notificationMgr; + private WebSocketNotificationPushMgrImpl notificationMgr; @OnOpen public void onOpen(Session session, EndpointConfig endpointConfig) { diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationMgrImpl.java b/src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationMgrImpl.java deleted file mode 100644 index bd097c4..0000000 --- a/src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationMgrImpl.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.iflytop.gd.infrastructure.modules; - -import cn.hutool.json.JSONUtil; -import com.iflytop.gd.common.notification.Notification; -import com.iflytop.gd.system.modules.NotificationMgr; -import org.springframework.stereotype.Component; -import jakarta.websocket.Session; - -import java.util.HashSet; -import java.util.Set; - -@Component -public class WebSocketNotificationMgrImpl implements NotificationMgr { - - private final Set sessions = new HashSet<>(); - - @Override - public void pushNotification(Notification notification) { - for (Session session : sessions) { - session.getAsyncRemote().sendText(JSONUtil.toJsonStr(notification)); - } - } - - /** - * 添加websocket session - * @param session - */ - public void addSession(Session session) { - sessions.add(session); - } -} diff --git a/src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationPushMgrImpl.java b/src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationPushMgrImpl.java new file mode 100644 index 0000000..c2b8b22 --- /dev/null +++ b/src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationPushMgrImpl.java @@ -0,0 +1,41 @@ +package com.iflytop.gd.infrastructure.modules; + +import cn.hutool.json.JSONUtil; +import com.iflytop.gd.common.notification.Notification; +import com.iflytop.gd.system.modules.NotificationPushMgr; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import jakarta.websocket.Session; + +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; + +/** + * 使用Websocket实现通知推送管理 + */ +@Slf4j +@Component +public class WebSocketNotificationPushMgrImpl implements NotificationPushMgr { + + private final Set sessions = new HashSet<>(); + + @Override + public void pushNotification(Notification notification) { + for (Session session : sessions) { + try { + session.getBasicRemote().sendText(JSONUtil.toJsonStr(notification)); + } catch (IOException e) { + log.error("Fail to send notification to session: {}", session.getId(), e); + } + } + } + + /** + * 添加websocket session + * @param session + */ + public void addSession(Session session) { + sessions.add(session); + } +} diff --git a/src/main/java/com/iflytop/gd/system/modules/NotificationMgr.java b/src/main/java/com/iflytop/gd/system/modules/NotificationMgr.java deleted file mode 100644 index 036fb96..0000000 --- a/src/main/java/com/iflytop/gd/system/modules/NotificationMgr.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iflytop.gd.system.modules; - -import com.iflytop.gd.common.notification.Notification; - -public interface NotificationMgr { - void pushNotification(Notification notification); -} diff --git a/src/main/java/com/iflytop/gd/system/modules/NotificationPushMgr.java b/src/main/java/com/iflytop/gd/system/modules/NotificationPushMgr.java new file mode 100644 index 0000000..0b38bac --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/modules/NotificationPushMgr.java @@ -0,0 +1,15 @@ +package com.iflytop.gd.system.modules; + +import com.iflytop.gd.common.notification.Notification; + +/** + * 通知管理器 + */ +public interface NotificationPushMgr { + + /** + * 向前端推送通知 + * @param notification 通知实例 + */ + void pushNotification(Notification notification); +}