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