这一节要实现的目标是 客户端获取服务器房间数量
在多人在线游戏里面,我们经常有很多房间的概念,或者区服的概念,这就是我们这一节的任务
客户端发送请求,拿到一个ServerInfo的集合
1.客户端部分
1.1 创建ServerInfo实体
这里的ServerInfo实体,就是一个房间区服实体
对应着有状态,和名称两个属性
1.2 创建获取服务器列表的消息
定义结构体,作为消息体
返回消息里面得包含这个结构体,并且设置为repeated代表可以重复,也就是一个list
这个list就可以存放我们房间区服集合
1.3 编写ServerInfo的System
这里是客户端的ServerInfo System
所以需要处理的
1.将服务器端发来的消息中的结构体ServerInfoProto进行解析和保存
2.将客户端本地的ServerInfo转换为ServerInfoProto
1.4 进入LoginHelper中编写获取服务器列表的方法
LoginHelper是我们写登录方法的地方
在这里我们定义一个新的异步函数,返回值为Int,代表函数结果

1.5 创建一个新的组件 ServerInfosComponent
在客户端我们需要ServerInfosComponent组件来保存我们服务器发来的n个S erverInfo房间
所以我们这个组件内部就是一个List来存放ServerInfo房间列表


1.6 编写 ServerInfosComponent System
ServerInfosComponent System是ServerInfosComponent的处理函数
在Hotfix层

我们实现了ServerInfosComponent System实体的Destory抽象方法,其实就是释放List里面全部的Entity
然后我们拓展了,添加ServerInfo实体的方法,将其添加到List里面

1.7 进入SceneFactory中在创建ZoneScene的时候添加我们的组件


1.8 进入LoginHelper中GetServerInfos方法遍历我们的服务器列表
我们在LoginHelper里面向服务器发送请求房间列表的时候,得到一个List,那么我们就可以去遍历List,然后将他们存到我们的客户端挂载的ServerInfosComponent组件上面

2. 服务器部分
2.1 服务器添加ServerInfo和ServerInfoSystem
直接Add我们客户端那里的代码过来就可以了,不需要重新写
2.2 服务器添加ServerInfoManagerComponent组件

这里的ServerInfoManagerComponent组件就是用来存储服务器上面的房间信息集合

2.3 编写ServerInfoManagerComponent System

具体逻辑
有和数据库进行联系,所以这里要使用异步的Awake

Load是热重载的生命周期函数
我们在Awake和Load的时候,都需要重新从数据库获取我们的房间信息

2.4 ServerInfo目录下面添加一个Handler处理客户端发来的消息
定义一个ErrorCode 代表令牌错误
如果Account服务器连接的session里面对应AccountId的Token和客户端的Token不一致,那么就代表账号出问题了
成功之后直接返回区服信息
2.5 在SceneFacotry中创建Account服务器的时候添加这个组件
总结
这一节我们完成了客户端获取服务器房间数量
在多人在线游戏里面,我们经常有很多房间的概念,或者区服的概念
客户端发送请求,拿到一个ServerInfo的集合,然后服务器接受到请求,做判断,然后将ServerInfo集合从数据库里面拿出来,然后发送回复消息给客户端