Netty·一对一发送消息

2022-12-01 15:12:38 浏览数 (2)

消息发送

一对一发送消息

代码语言:javascript复制
// 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()   "] 不在线,发送失败!");
}

对组发送消息

代码语言:javascript复制
// 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);

0 人点赞