Browse Source

fix: 系统消息多终端下bug

master
xsx 2 years ago
parent
commit
72c596864b
  1. 40
      im-server/src/main/java/com/bx/imserver/netty/processor/SystemMessageProcessor.java

40
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);
}
}

Loading…
Cancel
Save