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.scheduling.annotation.Async; 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(topic = "msgListener") public class MsgListener { @Async("msgExecutor") @EventListener(MessageEvent.class) public void ArdCallHistoryEventListener(MessageEvent messageEvent) { log.debug("监听到会话消息事件:"+messageEvent.getArdCallHistory().getContent()); log.debug("在线用户数量:"+ONLINE_USER_SESSIONS.size()); String targetId=messageEvent.getTargetId(); ArdCallHistory ardCallHistory = messageEvent.getArdCallHistory(); // 构建正则表达式模式 String regex = "^" + Pattern.quote(targetId) + "_\\d+$"; Pattern pattern = Pattern.compile(regex); Map 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)); } }