obsidian/笔记文件/2.笔记/Protobuf序列化_第二章.md

152 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

2025-03-26 00:02:56 +08:00
udp客户端对应服务端发回的登录相关网络消息回包处理逻辑是打印log
![[Pasted image 20240418160819.png]]
对应服务端发回的背包相关网络消息回包处理逻辑也是打印log
![[Pasted image 20240418160849.png]]
ClientRecive函数接口是客户端的[[await]]异步接收服务端发过来网络消息的逻辑也是调用常规的解序列化DeSerialize接口通过头部的cmd协议标识调用对应登录的 loginHandler 和背包的 bagHandler 处理响应逻辑 即可
![[Pasted image 20240418160934.png]]
客户端的逻辑根节点也是声明一个udp客户端、登录和背包的Handler回包处理逻辑对应服务器ip、单例instance和获取器
![[Pasted image 20240418161250.png]]
客户端Init初始化接口完成各变量的初始化也是通过[[Task]]创建ClientRecive的消息接收任务
![[Pasted image 20240418161342.png]]
ReqLogin是客户端请求登录的接口
![[Pasted image 20240418161452.png]]
ReqBag是客户端请求背包数据的接口
![[Pasted image 20240418161520.png]]
客户端对应的Main主函数调用对应逻辑根节点的Init初始化然后while死循环中ReadLine监听输入如果输入"login"就会发送,客户端登录请求;
如果输入"bag"就会发送,提取背包数据请求;
![[Pasted image 20240418161555.png]]
先后调试服务端、客户端对应log正常
![[Pasted image 20240418161808.png]]
![[Pasted image 20240418161750.png]]
客户端,输入,回车
![[Pasted image 20240418161822.png]]
服务端接收到请求→发回包→客户端接收到回包打印log都正常
![[Pasted image 20240418161908.png]]
![[Pasted image 20240418161921.png]]
继续测试背包客户端输入回车log都正常
![[Pasted image 20240418161952.png]]
![[Pasted image 20240418162004.png]]
![[Pasted image 20240418162013.png]]
解析一下Protobuf对应的.proto后缀文件结构
协议包名称自定义LogicProtocol相关的修饰符message协议、required字段
![[Pasted image 20240418162214.png]]
继续也有enum枚举
![[Pasted image 20240418162418.png]]
继续完成剩余的数据包整体构建还有修饰符Optional表示这是可选字段可有可无
![[Pasted image 20240418162434.png]]
参考[[protobuf的Required,Optional,Repeated限定修饰符]]即可
对应的run.bat批处理文件所在路径
![[Pasted image 20240418164721.png]]
批处理脚本逻辑会调用soft目录的protogen.exe可执行程序将NetProtocol.proto协议文件解析成脚本逻辑文件
C#相关的输出路径是回到上层目录然后再前往仨文件夹分别对应UDP客户端、UDP服务端、unity客户端的Asset目录对应的文件夹
还有一个是java相关的会输出到java服务器的相关路径
![[Pasted image 20240418164701.png]]
双击运行log显示生成脚本正常
![[Pasted image 20240418165120.png]]
对应生成路径,也正常
![[Pasted image 20240418165155.png]]
![[Pasted image 20240418165210.png]]
服务端对应protobuf的登录请求回调调用的是对应protobuf的逻辑根节点包含的SendMsg发送消息接口
![[Pasted image 20240418165335.png]]
protobuf的逻辑根节点对应的SendMsg发送消息逻辑接口使用的是protobuf内部的Serializer序列化逻辑
![[Pasted image 20240418165424.png]]
![[Pasted image 20240418165537.png]]
服务端protobuf对应的背包请求同理
![[Pasted image 20240418165602.png]]
protobuf逻辑根节点跟常规的基本一致只是更换了Serializer序列化相关机制
![[Pasted image 20240418165655.png]]
![[Pasted image 20240418165732.png]]
修改服务端调用
![[Pasted image 20240418165802.png]]
客户端对应protobuf的脚本同理
![[Pasted image 20240418165841.png]]
修改调用,同理
![[Pasted image 20240418165901.png]]
调试服务端+客户端log正常
![[Pasted image 20240418170037.png]]
![[Pasted image 20240418170049.png]]
打开unity客户端这是挂载的脚本
![[Pasted image 20240418170204.png]]
文件结构,和客户端实例,基本相同
![[Pasted image 20240418170234.png]]
Start开始函数主要修改一下对应的ip即可
![[Pasted image 20240418170304.png]]
Update更新函数输入L是登录请求输入B是背包请求
![[Pasted image 20240418170333.png]]
运行游戏输入L和B回包log打印正常
![[Pasted image 20240418170412.png]]
服务端log也正常
![[Pasted image 20240418170431.png]]