添加自定义协议,实现自定义消息收发。
添加自定义协议 添加自定义 Request 前往 ..\Src\Lib\proto 打开 message.proto 文件,在 message NetMessageRequest 下添加自定义 Request. 等号后面按 1、2、3 依次摆列。
1 2 3 4 5 6 7 8 9 10 message NetMessageRequest { MapEntitySyncRequest mapEntitySync = 8 ; MapTeleportRequest mapTeleport = 9 ; FirstTestRequest firstTest = 10 ; }
空白处添加自定义 Request. 等号后面 1、2、3 依次摆列。
message FirstTestRequest { string testMessage = 1 ; }
生成协议 前往 ..\Tools 运行 genproto.cmd,生成协议。
生成解决方案 前往服务端文件,打开解决方案,右键解决方案,**不是项目 **,生成解决方案。确保成功生成 3 个项目。
拷贝必要文件 前往 ..\Src\Lib\Protocol\bin\Debug 拷贝除 .pdb 以外 3 个文件到 ..\Src\Client\Assets\References,因为客户端的协议不会自动更新,所以要手动拷贝。
使用协议实现收发消息 使用协议实现收发消息。
客户端 新建 Request.
SkillBridge.Message.FirstTestRequest firstTestRequest = new SkillBridge.Message.FirstTestRequest(); firstTestRequest.testMessage = "Hello! Test Succeed." ;
打包并发送消息。
SkillBridge.Message.NetMessage msg = new SkillBridge.Message.NetMessage(); msg.Request = new SkillBridge.Message.NetMessageRequest(); msg.Request.firstTest = firstTestRequest; NetClient.Instance.SendMessage(msg);
不要忘了首先 Init() 并 Connect().
NetClient.Instance.Init("127.0.0.1" , 8000 ); NetClient.Instance.Connect();
服务端 首先在 GameServer 项目 Service 文件夹下添加专用消息处理类,如 TestService.cs.
TestService.cs 中代码如下,别忘了 using Common; 等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 internal class TestService : Singleton <TestService >{ public void Init () { } public void Start () { MessageDistributer<NetConnection<NetSession>>.Instance.Subscribe<FirstTestRequest>(this .OnFirstTestRequest); } public void Stop () { } private void OnFirstTestRequest (NetConnection<NetSession> sender, FirstTestRequest request ) { Log.InfoFormat("FirstTestRequest: Test Message: {0}" , request.testMessage); } }
再修改 GameServer.cs 代码,修改 public bool Init() 以及 public void Start().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public bool Init (){ network = new NetService(); network.Init(8000 ); TestService.Instance.Init(); thread = new Thread(new ThreadStart(this .Update)); return true ; } public void Start (){ network.Start(); TestService.Instance.Start(); running = true ; thread.Start(); }
然后前往 Common 项目 Network 文件夹,修改 MessageDispatch.cs 文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 public void Dispatch (T sender, SkillBridge.Message.NetMessageRequest message ){ if (message.userRegister != null ) { MessageDistributer<T>.Instance.RaiseEvent(sender,message.userRegister); } if (message.userLogin != null ) { MessageDistributer<T>.Instance.RaiseEvent(sender, message.userLogin); } if (message.createChar != null ) { MessageDistributer<T>.Instance.RaiseEvent(sender, message.createChar); } if (message.gameEnter != null ) { MessageDistributer<T>.Instance.RaiseEvent(sender, message.gameEnter); } if (message.gameLeave != null ) { MessageDistributer<T>.Instance.RaiseEvent(sender, message.gameLeave); } if (message.mapCharacterEnter != null ) { MessageDistributer<T>.Instance.RaiseEvent(sender, message.mapCharacterEnter); } if (message.mapEntitySync != null ) { MessageDistributer<T>.Instance.RaiseEvent(sender, message.mapEntitySync); } if (message.mapTeleport != null ) { MessageDistributer<T>.Instance.RaiseEvent(sender, message.mapTeleport); } if (message.firstTest != null ) { MessageDistributer<T>.Instance.RaiseEvent(sender, message.firstTest); } }
到此自定义协议消息收发完成。