liusuyi
2024-07-26 92a1a1e5b8fa53e908d1e0a398acc524b8798d0e
修改:群聊单聊会话以监听事件方式进行websocket转发
已添加2个文件
已修改1个文件
95 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/call/dto/MessageEvent.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/listener/MsgListener.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
}
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();
        // æž„建正则表达式模式
        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));
    }
}
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
            // æž„建正则表达式模式
            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
                    // æž„建正则表达式模式
                    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);
    }