一对一发送消息

消息发送

一对一发送消息

// 1.拿到消息发送方的会话信息
Session session = SessionUtil.getSession(ctx.channel());

// 2.通过消息发送方的会话信息构造要发送的消息
MessageResponsePacket messageResponsePacket = new MessageResponsePacket();
messageResponsePacket.setFromUserId(session.getUserId());
messageResponsePacket.setFromUserName(session.getUserName());
messageResponsePacket.setMessage(messageRequestPacket.getMessage());

// 3.拿到消息接收方的 channel
Channel toUserChannel = SessionUtil.getChannel(messageRequestPacket.getToUserId());

// 4.将消息发送给消息接收方
if (toUserChannel != null && SessionUtil.hasLogin(toUserChannel)) {
  toUserChannel.writeAndFlush(messageResponsePacket);
} else {
  System.err.println("[" + messageRequestPacket.getToUserId() + "] 不在线,发送失败!");
}

对组发送消息

// 1. 创建一个 channel 分组
ChannelGroup channelGroup = new DefaultChannelGroup(ctx.executor());

// 2. 筛选出待加入群聊的用户的 channel 和 userName
for (String userId : userIdList) {
  Channel channel = SessionUtil.getChannel(userId);
  if (channel != null) {
    channelGroup.add(channel);
    userNameList.add(SessionUtil.getSession(channel).getUserName());
  }
}

// 3. 创建群聊结果的响应
CreateGroupResponsePacket createGroupResponsePacket = new CreateGroupResponsePacket();
createGroupResponsePacket.setSuccess(true);
createGroupResponsePacket.setGroupId(IDUtil.randomId());
createGroupResponsePacket.setUserNameList(userNameList);

// 4. 给每个客户端发送拉群通知
channelGroup.writeAndFlush(createGroupResponsePacket);

  转载请注明: 金点帝国 一对一发送消息

 上一篇
Handler 执行顺序 Handler 执行顺序
Handler 执行顺序ChannelInboundHandler 和 ChannelOutboundHandlerChannelHandler 有两个子类 ChannelInboundHandler 和 ChannelOutboundHa
2021-10-18
下一篇 
CentOS 防火墙 CentOS 防火墙
CentOS 防火墙 本文为个人学习摘要笔记。原文地址:Linux 防火墙 Firewall 和 Iptables 的使用 Linux 中有两种防火墙软件,ConterOS7.0 以上使用的是 firewall,ConterOS7.0 以
2021-10-18
  目录