在开始之前,我们依然是先来看一下最终的效果。
1. 最终效果
服务端
从服务端可以看到,闪电侠、逆闪、极速先后登录到服务器,然后随后,闪电侠创建一个群聊,接下来,萨维塔也登录了。这里,客户端我们只展示闪电侠和萨维塔的控制台界面
客户端 - 闪电侠
客户端 - 萨维塔
我们可以看到最终效果是四位用户登录成功之后
- 闪电侠先拉逆闪和极速加入了群聊,控制台输出群创建成功的消息。
- 随后在萨维塔的控制台输入 "joinGroup" 之后再输入群聊的 id,加入群聊,控制台显示加入群成功。
- 在闪电侠的控制台输入 "listGroupMembers" 之后再输入群聊的 id,展示了当前群聊成员包括了极速、萨维塔、闪电侠、逆闪。
- 萨维塔的控制台输入 "quitGroup" 之后再输入群聊的 id,退出群聊,控制台显示退群成功。
- 最后在闪电侠的控制台输入 "listGroupMembers" 之后再输入群聊的 ID,展示了当前群聊成员已无萨维塔。
接下来,我们就来实现加入群聊,退出群聊,获取成员列表三大功能。
2. 群的加入
2.1 控制台添加群加入命令处理器
JoinGroupConsoleCommand.java
public class JoinGroupConsoleCommand implements ConsoleCommand {
@Override
public void exec(Scanner scanner, Channel channel) {
JoinGroupRequestPacket joinGroupRequestPacket = new JoinGroupRequestPacket();
System.out.print("输入 groupId,加入群聊:");
String groupId = scanner.next();
joinGroupRequestPacket.setGroupId(groupId);
channel.writeAndFlush(joinGroupRequestPacket);
}
}
按照前面两小节的套路,我们在控制台先添加群加入命令处理器 JoinGroupConsoleCommand
,在这个处理器中,我们创建一个指令对象 JoinGroupRequestPacket
,填上群 id 之后,将数据包发送至服务端。之后,我们将该控制台指令添加到 ConsoleCommandManager
。
ConsoleCommandManager.java
public class ConsoleCommandManager implements ConsoleComman