瀏覽代碼

fix: 系统消息多终端下bug

xsx 1 年之前
父節點
當前提交
72c596864b
共有 1 個文件被更改,包括 21 次插入19 次删除
  1. 21 19
      im-server/src/main/java/com/bx/imserver/netty/processor/SystemMessageProcessor.java

+ 21 - 19
im-server/src/main/java/com/bx/imserver/netty/processor/SystemMessageProcessor.java

@@ -26,27 +26,29 @@ public class SystemMessageProcessor extends AbstractMessageProcessor<IMRecvInfo>
 
     @Override
     public void process(IMRecvInfo recvInfo) {
-        IMUserInfo receiver = recvInfo.getReceivers().get(0);
-        log.info("接收到系统消息,接收者:{},内容:{}",  receiver.getId(), recvInfo.getData());
-        try {
-            ChannelHandlerContext channelCtx = UserChannelCtxMap.getChannelCtx(receiver.getId(), receiver.getTerminal());
-            if (!Objects.isNull(channelCtx)) {
-                // 推送消息到用户
-                IMSendInfo<Object> sendInfo = new IMSendInfo<>();
-                sendInfo.setCmd(IMCmdType.SYSTEM_MESSAGE.code());
-                sendInfo.setData(recvInfo.getData());
-                channelCtx.channel().writeAndFlush(sendInfo);
-                // 消息发送成功确认
-                sendResult(recvInfo, IMSendCode.SUCCESS);
-            } else {
+        log.info("接收到系统消息,接收用户数量:{},内容:{}",  recvInfo.getReceivers().size(), recvInfo.getData());
+        for (IMUserInfo receiver : recvInfo.getReceivers()) {
+            try {
+                ChannelHandlerContext channelCtx =
+                    UserChannelCtxMap.getChannelCtx(receiver.getId(), receiver.getTerminal());
+                if (!Objects.isNull(channelCtx)) {
+                    // 推送消息到用户
+                    IMSendInfo<Object> sendInfo = new IMSendInfo<>();
+                    sendInfo.setCmd(IMCmdType.SYSTEM_MESSAGE.code());
+                    sendInfo.setData(recvInfo.getData());
+                    channelCtx.channel().writeAndFlush(sendInfo);
+                    // 消息发送成功确认
+                    sendResult(recvInfo, IMSendCode.SUCCESS);
+                } else {
+                    // 消息推送失败确认
+                    sendResult(recvInfo, IMSendCode.NOT_FIND_CHANNEL);
+                    log.error("未找到channel,接收者:{},内容:{}", receiver.getId(), recvInfo.getData());
+                }
+            } catch (Exception e) {
                 // 消息推送失败确认
-                sendResult(recvInfo, IMSendCode.NOT_FIND_CHANNEL);
-                log.error("未找到channel,接收者:{},内容:{}",receiver.getId(), recvInfo.getData());
+                sendResult(recvInfo, IMSendCode.UNKONW_ERROR);
+                log.error("发送异常,,接收者:{},内容:{}", receiver.getId(), recvInfo.getData(), e);
             }
-        } catch (Exception e) {
-            // 消息推送失败确认
-            sendResult(recvInfo, IMSendCode.UNKONW_ERROR);
-            log.error("发送异常,,接收者:{},内容:{}", receiver.getId(), recvInfo.getData(), e);
         }
 
     }