ET框架学习——消息系统之二

36 篇文章 2 订阅
22 篇文章 5 订阅
  • AChannel 

       AChannel类继承自ComponentWithId。内部保存了一些和网络传输相关的字段(AServiceIPEndPoint等),还有两个委托Action<AChannel, int> errorCallbackAction<MemoryStream> readCallback。这两个委托和消息传输的结果相关,分别用于保存错误消息和正确消息的执行方法。在正确传输后,会执行OnRead方法,传输失败是执行OnError方法。

       Achannel类的构造函数是用protected修饰的,在初始化的时候会生成组件的唯一Id(IdGenerater.GenerateId()方法),服务器类型和ChannelType

       另外,还有两个抽象方法,Start方法和Send方法。

  • Session类

       Module.Session类是继承自Entity, 有一个Awake事件,在组件初始化过程中会执行Awake方法。该方法会确定一个AChannel对象,同时清空Dictionary<int, Action<IResponse>> requestCallback字典(该字典猜测是用于存放相应后端消息的方法)。最后会给AChannel的两个委托添加元素。

       Run(MemoryStream memoryStream)方法(关于MemoryStream类可以看这篇文章),参数就是网络消息流的内容(具体是否包括参数内部,还不知道)。通过对流内容的判断,获取其消息码的区间范围,判断是否属于ClientHotfixMessage消息,如果是,则调用SessionCallbackComponent组件执行,这里是将消息转发到了Hotfix层去执行了。否则,就通过OpcodeTypeComponent组件,获取持有消息码的辅助类,然后配合消息流,反序列化出消息内容。接着对消息做处理,如果是rpc返回消息,否则交由MessageDispatcherComponent组件分发。如果是相应类型的消息,在requestCallback字典中查找相应的消息码,移除对于元素后,执行消息。

       Call重载方法,向requestCallback字典中添加元素,Key是一个自增的变量,Value是一个委托,会检测消息的RPC是否异常,然后传递出消息。同时调用Send方法,发送消息。具体用法,还有待学习。

      Send(byte flag, ushort opcode, object message)方法,将流指针定位到消息内容起点,将消息内容写入到流中,将流内容包装后,重新发送。至于都包装了哪些内容,暂时不得而知。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值