这一节要实现的目标是 客户端获取服务器房间数量
在多人在线游戏里面,我们经常有很多房间的概念,或者区服的概念,这就是我们这一节的任务
客户端发送请求,拿到一个ServerInfo的集合
- 1.客户端部分
- 1.1 创建ServerInfo实体
- 1.2 创建获取服务器列表的消息
- 1.3 编写ServerInfo的System
- 1.4 进入LoginHelper中编写获取服务器列表的方法
- 1.5 创建一个新的组件 ServerInfosComponent
- 1.6 编写 ServerInfosComponent System
- 1.7 进入SceneFactory中在创建ZoneScene的时候添加我们的组件
- 1.8 进入LoginHelper中GetServerInfos方法遍历我们的服务器列表
- 2. 服务器部分
- 2.1 服务器添加ServerInfo和ServerInfoSystem
- 2.2 服务器添加ServerInfoManagerComponent组件
- 2.3 编写ServerInfoManagerComponent System
- 2.4 ServerInfo目录下面添加一个Handler处理客户端发来的消息
- 2.5 在SceneFacotry中创建Account服务器的时候添加这个组件
- 总结
这里的ServerInfo实体,就是一个房间区服实体
对应着有状态,和名称两个属性
1.2 创建获取服务器列表的消息定义结构体,作为消息体
返回消息里面得包含这个结构体,并且设置为repeated代表可以重复,也就是一个list
这个list就可以存放我们房间区服集合
这里是客户端的ServerInfo System
所以需要处理的
1.将服务器端发来的消息中的结构体ServerInfoProto进行解析和保存
2.将客户端本地的ServerInfo转换为ServerInfoProto
LoginHelper是我们写登录方法的地方
在这里我们定义一个新的异步函数,返回值为Int,代表函数结果
1.5 创建一个新的组件 ServerInfosComponent在客户端我们需要ServerInfosComponent组件来保存我们服务器发来的n个S erverInfo房间
所以我们这个组件内部就是一个List来存放ServerInfo房间列表
1.6 编写 ServerInfosComponent SystemServerInfosComponent 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我们客户端那里的代码过来就可以了,不需要重新写
这里的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集合从数据库里面拿出来,然后发送回复消息给客户端



