ET框架-22 创建ServerInfo实体及事件

这一节要实现的目标是 客户端获取服务器房间数量

在多人在线游戏里面,我们经常有很多房间的概念,或者区服的概念,这就是我们这一节的任务

客户端发送请求,拿到一个ServerInfo的集合

1.客户端部分

1.1 创建ServerInfo实体

image-20220531223317019

这里的ServerInfo实体,就是一个房间区服实体

对应着有状态,和名称两个属性

image-20220531225832676

1.2 创建获取服务器列表的消息

定义结构体,作为消息体

在这里插入图片描述

返回消息里面得包含这个结构体,并且设置为repeated代表可以重复,也就是一个list

这个list就可以存放我们房间区服集合

在这里插入图片描述
image-20220531225908539

1.3 编写ServerInfo的System

image-20220531225919856

这里是客户端的ServerInfo System
所以需要处理的
1.将服务器端发来的消息中的结构体ServerInfoProto进行解析和保存
2.将客户端本地的ServerInfo转换为ServerInfoProto
image-20220531230959497

1.4 进入LoginHelper中编写获取服务器列表的方法

image-20220531231010227

LoginHelper是我们写登录方法的地方

在这里我们定义一个新的异步函数,返回值为Int,代表函数结果

在这里插入图片描述

1.5 创建一个新的组件 ServerInfosComponent

在客户端我们需要ServerInfosComponent组件来保存我们服务器发来的n个S erverInfo房间

所以我们这个组件内部就是一个List来存放ServerInfo房间列表

image-20220611133644430 image-20220611133723073

1.6 编写 ServerInfosComponent System

ServerInfosComponent System是ServerInfosComponent的处理函数

在Hotfix层

image-20220611141709608

我们实现了ServerInfosComponent System实体的Destory抽象方法,其实就是释放List里面全部的Entity

然后我们拓展了,添加ServerInfo实体的方法,将其添加到List里面

image-20220611141754224

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

image-20220611142226734 image-20220611142209633

1.8 进入LoginHelper中GetServerInfos方法遍历我们的服务器列表

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

image-20220531231010227

image-20220611142835480

2. 服务器部分

2.1 服务器添加ServerInfo和ServerInfoSystem

直接Add我们客户端那里的代码过来就可以了,不需要重新写
image-20220611144010671image-20220611144404637

2.2 服务器添加ServerInfoManagerComponent组件

image-20220611145111435

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

image-20220611145126096

2.3 编写ServerInfoManagerComponent System

image-20220611151235800

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

image-20220611150908658

Load是热重载的生命周期函数

我们在Awake和Load的时候,都需要重新从数据库获取我们的房间信息

image-20220611150955338

2.4 ServerInfo目录下面添加一个Handler处理客户端发来的消息

定义一个ErrorCode 代表令牌错误
image-20220612143952661

image-20220612144602727

如果Account服务器连接的session里面对应AccountId的Token和客户端的Token不一致,那么就代表账号出问题了

image-20220612144729009

成功之后直接返回区服信息

2.5 在SceneFacotry中创建Account服务器的时候添加这个组件

image-20220612144751399

image-20220612144844272

总结

这一节我们完成了客户端获取服务器房间数量

在多人在线游戏里面,我们经常有很多房间的概念,或者区服的概念

客户端发送请求,拿到一个ServerInfo的集合,然后服务器接受到请求,做判断,然后将ServerInfo集合从数据库里面拿出来,然后发送回复消息给客户端

猜你喜欢

转载自blog.csdn.net/m0_48781656/article/details/125245624