ET源码学习(八):InnerMessageDispatcher

在学习NetInnerComponent时出现了InnerMessageDispatcher,这节先看InnerMessageDispatcher。这节涉及ActorMessageDispatcherComponent和Session。ActorMessageDispatcherComponent在这节基本所有方法都用过。


在NetInnerComponent的OnRead中,调用了InnerMessageDispatcher的Dispatch方法
InnerMessageDispatcher中只有Dispatch一个方法
先看开头, Packet.ActorIdIndex = 0, 刚好可以对应TChannel的Send方法中,标红那一段,得到actorId和操作码



TChannel-Send

然后往下看,这个是标记了SERVER宏也就是服务器



OpcodeTypeComponent.Instance.IsOutrActorMessage(opcode)判断是否为外网信息,并且是否继承了IActorMessage



通过计算得到realActorId去EventSystem去找到实体,如果没有实体通过操作码得到Type,生成报错信息message
如果这实体是Session那么设置stream位置并发送

然后继续往下看,通过操作码找到Type并将其反序列化,判断是否为IResponse并且不是IActorResponse,那么直接用Session读



上面执行了普通的IResponse
下面就是所有Message的执行,先看IActorRequest,有一个回调利用Session重新发送回去



InnerMessageDispatcherHelper.HandleIActorRequest摘选核心逻辑
从实体上面拿到mailBoxComponent这组件只有类型没有具体方法



而ActorMessageDispatcherComponent.Instance.Handle(entity, iActorRequest, reply);只是根据message类型去执行类型中Handle函数

IActorResponse类型
和上面一模一样执行了InnerMessageDispatcherHelper.HandleIActorResponse



InnerMessageDispatcherHelper.HandleIActorResponse,根据RpcId拿到发送者执行Run



public static void Run(ActorMessageSender self, IActorResponse response)
进行合法性判断,最后设置上面拿到的ActorMessageSender中Tcs(将会完成的任务)的结果

IActorMessage 执行了InnerMessageDispatcherHelper.HandleIActorMessage



InnerMessageDispatcherHelper.HandleIActorMessage 是不是发现和上面IActorResponse很像,只不过没有Reply。这个不需要Response的



最后就是普通的Message了




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容