定义参考Protobuf通信协议即可; 如果要使用,Protobuf通信协议,需要先用到,对应的程序集; 在微软的,官方NuGet软件包平台,就可以下载使用; 右键,测试工程

可以看到,是有下载和安装了,对应的软件包,也隐式安装了,与之对应的,Core核心库

unity客户端,同理,也是集成了,对应的软件包dll程序集

测试工程,先弄一个Person协议类,需要加上ProtoContract标签,其中也会加上ProtoMember,和tag数字索引,标识协议包含的数据

再弄一个Address地址相关的协议类,也是加上ProtoContract和ProtoMember标签,而且嵌套在Person协议类里; 不管是哪个协议类,都需要加上Serializable标签,标识可序列化;

使用原生的Serialize序列化接口,对Person协议类,进行序列化

与之对应的,原生,解序列化函数接口

调用原生序列化、解序列化的TestBasicNormal函数接口,完成Person和Address协议类的构建后,序列化person到data字节数组,再直接DeSerialize解序列化变回Person,打印其中的字段

Main函数调用,运行,log正常

TestBasicPB函数接口,是用来测试Protobuf的,最开始也是完成,Person和Address协议类的构建,然后调用Protobuf内部的Serializer逻辑,对应的Serialize序列化、Deserialize解序列化接口; 然后,也是打印log信息;

继续,测试创建一个person.bytes字节文件,序列化写入,然后,解序列化读取,打印log

主函数调用,打印log正常

测试使用的,是UDP网络通信,与之对应的,协议类,其中CMD枚举,是用于通信的Head头部标识,包含 LogicLogin登录相关、BagInfo背包相关; 还有一个Error枚举,是用于错误码的逻辑处理;

背包协议,对应的ReqBagInfo请求、RspBagInfo接收,其中背包结构BagItem

登录协议,ReqLogicLogin请求,有acct账号、pass密码结构,RspLogicLogin接收,对应UserData用户数据,结构为uid、name名字、level等级、exp经验

还有俩测试连接的,请求接收,分别是ReqXXXOOO、RspXXXOOO; 消息主体是Body结构,包含上述解析的,协议结构;

Head是头部,包含CMD协议标识的枚举,而Pkg就是,头部 + 消息主体,的网络消息包

常规的Serialize序列化、DeSerialize解序列化工具接口

UDP跟TCP不一样的地方,其中一点是,Socket连接上,没有很明确的,客户端和服务端的区分

服务端的ReqLogin登录请求,响应逻辑:打印消息主体Body的acct账号、pass密码信息; 然后,构建一个Body消息主体,再调用服务端根逻辑ServerRoot的SendMsg函数接口,完成消息回发

SendMsg函数接口,对应的具体逻辑,就是构建Pkg消息包,使用常规的Serialize序列化工具,得到字节数组,通过udp发送即可

服务端的背包ReqBagInfo请求响应,也是在打印log之后,构建,背包RspBagInfo回包,对应的Body消息主体,也是调用,SendMsg函数接口,发回给客户端即可

服务端,逻辑根节点,声明了udp端、还有登录login和背包bag,对应协议的Handler事件逻辑; 弄一个Instance单例;

ServerRecive函数接口,使用await异步接收,udp网络消息,然后调用,常规的DeSerialize 解序列化工具; switch消息包的head头部cmd枚举,对应的协议类型,调用 登录相关loginHandler 或 背包相关 bagHandler 的响应逻辑即可;

根逻辑点,对应的Init初始化,就是各个Handler的实例化对象,再开一个udp连接,使用Task创建一个ServerRecive接收消息的任务即可

对应的Main主函数,调用Init初始化,开启服务器