文章目录
1.Actor消息的编写
我们编写一个Client到Map的一条消息
//IActorLocationRequest
代表这是一条由Client经过Gate网关进行转发到Map的Unit对象进行消息的处理和回复
// IActorLocationMessage
由于它是一条需要将经过Gate网关进行转发的一条消息,所以我们必须加上RpcId
Client到Map游戏服务器进程不需要回复的消息
Map游戏服务器上面的Unit对象发送到Client的消息
此时并不需要Location进行消息定位
因为我们Map游戏服务器上面的Unit对象已经保存了Client的信息
2. 进入LoginHelper.cs编写代码
在13节我们自己创建了一个LoginTest的方法,取代了Login方法,现在我们要解开Login的注释,反而将LoginTest进行注释
3. 发送消息给服务端Map
打开M2M_UnitTransferRequestHandler
这个文件的逻辑
将Unit对象传送到Map游戏服务器上面的处理逻辑
1.我们拿到Gate网关发来的Unit(在14节介绍过,新的Demo登录流程的Unit映射关系创建是在Gate网关创建的)
2.我们通知客户端进行场景切换,并且创建客户端的新的客户端场景以及 Unit
3.我们创建客户端的 Unit
客户端的Unit在哪里创建的呢?在切换场景的时候,SceneChangeHelper创建新客户端场景的同时,进行Unit创建
4.现在我们客户端有Unit 同时Map服务器也有Unit,此时我们就可以进行Actor通信了,因为Actor通信在14节介绍过,必须有实体的InstanceId才能进行Actor通信
3.1 我们在SceneChangeHelper里面添加我们的Actor消息
此时我们创建了我们的客户端的Unit
我们用客户端的Session就可以发送Actor消息给Map服务器
4. 对消息进行处理
4.1我们创建对应的Handler处理需要返回的Actor消息
C2M_TestActorLocationRequestHandler
这里参数是Unit,可以理解为客户端的关系映射,我们所有的逻辑都要绑定在Unit上面来进行开发
4.2我们创建对应的Handler处理不需要返回的消息
C2M_TestActorLocationMessageHandler
4.3我们创建Handler处理服务器发往客户端的不需要返回的消息
5.运行测试
我们首先全部生成解决方法
然后BuildCode
启动服务器,运行Unity
然后运行Unity
6.结果分析
首先我们看客户端,
1.我们收到了来自服务器Map的Actor消息 是IActorLocationResponse消息
zone: 1 {“_t”:“M2C_TestActorLocationResponse”,“RpcId”:8,“Error”:0,“Message”:null,“Content”:“aaaaaaaa”}
我们输出Content
2.我们收到了来自服务器Map的Message消息 ,是 IActorMessage消息
zone: 1 {“_t”:“M2C_TestActorMessage”,“Content”:“bbbbbbbb”}
我们输出Content
我们现在看服务器
1.我们收到了客户端发来的Actor消息 是IActorLocationRequest 消息
zone: 0 { “_t” : “C2M_TestActorLocationRequest”, “RpcId” : 5, “Content” : “111111” }
我们输出Content
2.我们收到了客户端的Message消息,带有RpcId,是IActorLocationMessage消息
zone: 0 { “_t” : “C2M_TestActorLocationMessage”, “RpcId” : 7, “Content” : “222222222” }
我们输出Content