Netty 群组聊天与管理

17 篇文章 0 订阅
17 篇文章 4 订阅

 

2016年冬天在大连小平岛,罕见零下22摄氏度,看到海面上冒烟,像温泉,但是冰冷刺骨,大傻鸥抗冻。

小平岛象鼻山~

                                                                                          微信公众号

                                                     王皓的GitHub:https://github.com/TenaciousDWang

 

        最近比较忙,虽然没人看,但下班后忙里偷闲坚持写写,就是个笔记,记录一下学习的过程。

        

         在上一篇文章中我们实现了群聊的创建功能,今天我们继续来完善群聊的管理功能,第一个是加入群聊功能,第二个是退出群聊功能,最后一个是显示群聊成员列表功能。

 

         群聊的加入,创建一个加入群聊指令,再根据我们之前的代码重构,添加一个控制台指令处理器。

 

        

 

        并在控制台处理器管理类中添加指令对应。

 

 

        客户端准备完毕,我们来为服务端添加一个加入群聊请求处理器JoinGroupRequestHandler继承SimpleChannelInboundHandler<JoinGroupRequestPacket>,重写channelRead0方法来应对JoinGroupRequestPacket数据包的处理。

 

 

        JoinGroupRequestHandler拿到数据包后,读取到群聊ID,从群组容器中找到该群组的channelGroup,将当前发送申请用户的channel放进去,然后创建加群响应JoinGroupResponsePacket发送至客户端。

 

 

        客户端创建处理JoinGroupResponsePacket数据包的Handler来将响应打印到控制台。

 

 

        接下来我们来实现群聊的退出,退出基本与加入一样,只不过是一个逆向操作,需要将当前提交用户的channel从退出群聊的channelGroup中移除即可,响应同上,这里只贴出关键代码。

 

 

            接下来我们实现获取群成员列表的功能,首先现在客户端添加控制台处理器,创建群聊成员列表数据指令包。

 

 

 

    consoleCommandMap.put("listGroupMembers", new ListGroupMembersConsoleCommand());注册对应指令。

 

        我们为服务端添加处理获取群聊成员列表指令的处理器,首先获取群聊的ID,获得该群聊的channelGroup,遍历里面的channel,将每一个channel的session信息保存到一个容器里写入响应数据包返回给客户端展示。

 

        响应数据包结构为:

 

 

        我们在客户端添加一个ListGroupMembersResponseHandler来将返回的数据包内群聊成员信息打印到控制台即可。

 

 

        最后我们来实现群聊得功能,客户端发送消息及群聊ID,服务端收到数据包后,根据群聊ID获取channelGroup,将消息写入即可。

 

        这里我们首先创建一个群聊发送信息的数据包。

 

 

        添加一个发送群聊消息的控制台处理器。

 

 

        consoleCommandMap.put("sendToGroup", new SendToGroupConsoleCommand());注册对应指令。

 

        服务端添加处理器来处理群聊消息数据包。

 

 

        创建GroupMessageResponsePacket群消息响应数据包写入群聊channelGroup中。

 

 

        客户端添加接收并处理群聊消息的Handler,打印到控制台即可。

 

 

        今天我们实现了群聊的管理功能及聊天功能,加入群聊,退出群聊,获取群聊成员列表。        

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值