Netty 群组聊天与管理

Netty 群组聊天与管理_第1张图片

 

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

Netty 群组聊天与管理_第2张图片

Netty 群组聊天与管理_第3张图片

小平岛象鼻山~

Netty 群组聊天与管理_第4张图片

                                                                                          微信公众号

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

 

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

        

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

 

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

 

Netty 群组聊天与管理_第5张图片

        

Netty 群组聊天与管理_第6张图片

 

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

 

Netty 群组聊天与管理_第7张图片

 

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

 

Netty 群组聊天与管理_第8张图片

 

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

 

Netty 群组聊天与管理_第9张图片

 

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

 

Netty 群组聊天与管理_第10张图片

 

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

 

Netty 群组聊天与管理_第11张图片

Netty 群组聊天与管理_第12张图片

 

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

 

Netty 群组聊天与管理_第13张图片

 

Netty 群组聊天与管理_第14张图片

 

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

 

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

 

        响应数据包结构为:

 

Netty 群组聊天与管理_第15张图片

 

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

 

 

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

 

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

 

Netty 群组聊天与管理_第16张图片

 

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

 

Netty 群组聊天与管理_第17张图片

 

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

 

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

 

Netty 群组聊天与管理_第18张图片

 

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

 

Netty 群组聊天与管理_第19张图片

 

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

 

Netty 群组聊天与管理_第20张图片

 

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

 

你可能感兴趣的:(Java,Netty,Netty,IM实战)