From 92a1a1e5b8fa53e908d1e0a398acc524b8798d0e Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: 星期五, 26 七月 2024 12:00:27 +0800
Subject: [PATCH] 修改:群聊单聊会话以监听事件方式进行websocket转发

---
 ard-work/src/main/java/com/ruoyi/call/dto/MessageEvent.java                       |   19 +++++++++
 ard-work/src/main/java/com/ruoyi/call/listener/MsgListener.java                   |   44 ++++++++++++++++++++++
 ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java |   32 ++++------------
 3 files changed, 71 insertions(+), 24 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/call/dto/MessageEvent.java b/ard-work/src/main/java/com/ruoyi/call/dto/MessageEvent.java
new file mode 100644
index 0000000..170996c
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/call/dto/MessageEvent.java
@@ -0,0 +1,19 @@
+package com.ruoyi.call.dto;
+
+import com.ruoyi.call.domain.ArdCallHistory;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * @ClassName:MessageEvent
+ * @Description:
+ * @Author:ard
+ * @Date:2024骞�07鏈�26鏃�10:37
+ * @Version:1.0
+ **/
+@Data
+@AllArgsConstructor
+public class MessageEvent {
+    String targetId;
+    ArdCallHistory ardCallHistory;
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/listener/MsgListener.java b/ard-work/src/main/java/com/ruoyi/call/listener/MsgListener.java
new file mode 100644
index 0000000..32c5f62
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/call/listener/MsgListener.java
@@ -0,0 +1,44 @@
+package com.ruoyi.call.listener;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.call.domain.ArdCallHistory;
+import com.ruoyi.call.dto.MessageEvent;
+import com.ruoyi.utils.websocket.util.WebSocketUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
+
+/**
+ * @Description: 浜嬩欢鐩戝惉
+ * @ClassName: MsgListener
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�09鏈�23鏃�8:37:00
+ **/
+@Component
+@Slf4j
+public class MsgListener {
+
+    @EventListener(MessageEvent.class)
+    public void ArdCallHistoryEventListener(MessageEvent messageEvent) {
+        log.debug("鐩戝惉鍒颁細璇濇秷鎭簨浠�:"+messageEvent.getArdCallHistory().getContent());
+        String targetId=messageEvent.getTargetId();
+        ArdCallHistory ardCallHistory = messageEvent.getArdCallHistory();
+        // 鏋勫缓姝e垯琛ㄨ揪寮忔ā寮�
+        String regex = "^" + Pattern.quote(targetId) + "_\\d+$";
+        Pattern pattern = Pattern.compile(regex);
+        Map<String, Object> messageMap = new HashMap<>();
+        messageMap.put("type", "message");
+        messageMap.put("message", JSON.toJSONString(ardCallHistory));
+        ONLINE_USER_SESSIONS.entrySet().stream().filter(entry -> {
+            Matcher matcher = pattern.matcher(entry.getKey());
+            return matcher.matches();
+        }).map(Map.Entry::getValue).forEach(session -> WebSocketUtils.sendMessage(session, messageMap));
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
index d7a967c..979a542 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
@@ -6,6 +6,7 @@
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.call.domain.*;
+import com.ruoyi.call.dto.MessageEvent;
 import com.ruoyi.call.mapper.*;
 import com.ruoyi.call.service.IArdCallGroupService;
 import com.ruoyi.common.core.domain.entity.SysUser;
@@ -16,6 +17,7 @@
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.utils.websocket.util.WebSocketUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -51,6 +53,8 @@
     private ArdCallGroupUserMapper ardCallGroupUserMapper;
     @Resource
     private IArdCallGroupService ardCallGroupService;
+    @Autowired
+    private ApplicationEventPublisher eventPublisher;
 
     /**
      * 鏌ヨ浼氳瘽鍘嗗彶
@@ -104,7 +108,6 @@
      */
     @Override
     public int insertArdCallHistory(ArdCallHistory ardCallHistory) {
-
         ardCallHistory.setId(IdUtils.simpleUUID());
         ardCallHistory.setCreateTime(DateUtils.getNowDate());
         ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId());
@@ -125,17 +128,8 @@
                 ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
             }
             //websocket鍙戦�佺粰targetId
-            // 鏋勫缓姝e垯琛ㄨ揪寮忔ā寮�
-            String regex = "^" + Pattern.quote(ardCallHistory.getTargetId()) + "_\\d+$";
-            Pattern pattern = Pattern.compile(regex);
-            Map<String, Object> messageMap = new HashMap<>();
-            messageMap.put("type", "message");
-            messageMap.put("message", JSON.toJSONString(ardCallHistory));
-            ONLINE_USER_SESSIONS.entrySet().stream().filter(entry -> {
-                Matcher matcher = pattern.matcher(entry.getKey());
-                return matcher.matches();
-            }).map(Map.Entry::getValue).forEach(session -> WebSocketUtils.sendMessage(session, messageMap));
-
+            MessageEvent messageEvent = new MessageEvent(ardCallHistory.getTargetId(), ardCallHistory);
+            eventPublisher.publishEvent(messageEvent);
         } else {
             //鏇存柊缇よ亰鐢ㄦ埛鏈娑堟伅璁℃暟
             ArdCallGroupUser ardCallGroupUser = new ArdCallGroupUser();
@@ -159,20 +153,10 @@
                         ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
                     }
                     //websocket鍙戦�佺粰targetId
-                    // 鏋勫缓姝e垯琛ㄨ揪寮忔ā寮�
-                    String regex = "^" + Pattern.quote(groupUser.getUserId()) + "_\\d+$";
-                    Pattern pattern = Pattern.compile(regex);
-                    Map<String, Object> messageMap = new HashMap<>();
-                    messageMap.put("type", "message");
-                    messageMap.put("message", JSON.toJSONString(ardCallHistory));
-                    ONLINE_USER_SESSIONS.entrySet().stream().filter(entry -> {
-                        Matcher matcher = pattern.matcher(entry.getKey());
-                        return matcher.matches();
-                    }).map(Map.Entry::getValue).forEach(session -> WebSocketUtils.sendMessage(session, messageMap));
+                    MessageEvent messageEvent = new MessageEvent(groupUser.getUserId(), ardCallHistory);
+                    eventPublisher.publishEvent(messageEvent);
                 }
-
             });
-
         }
         return ardCallHistoryMapper.insertArdCallHistory(ardCallHistory);
     }

--
Gitblit v1.9.3