• 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)方法,将流指针定位到消息内容起点,将消息内容写入到流中,将流内容包装后,重新发送。至于都包装了哪些内容,暂时不得而知。

ET框架学习——消息系统之二相关推荐

  1. ET框架学习——消息系统之七

    最近一直在搞这个消息流转路径,做了几张图: Connect&Recive Send 数据包装变化

  2. 大型网站系统架构系列:分布式消息队列(二)

    四.JMS消息服务 讲消息队列就不得不提JMS .JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准/规范,允许应用程序组件基于JavaEE平台创建.发送. ...

  3. Flask框架flash消息闪现学习与优化符合闪现之名

    Flask的flash 第一次知道Flask有flash这个功能时,听这名字就觉得高端,消息闪现-是跳刀blink闪烁躲技能的top10操作吗?可结果让我好失望,哪里有什么闪现的效果,不过是平常的消息 ...

  4. 苹果框架学习(二) Metal

    文章目录 苹果框架学习(二) Metal Metal简介 1. Essentials 1.1 基本任务和概念 1.2 将OpenGL代码迁移到Metal 1.3 将您的Metal代码移植到苹果Arm芯 ...

  5. 《SpringBoot框架学习二之HTTP协议》

    <SpringBoot框架学习二之HTTP协议> 文章目录 <SpringBoot框架学习二之HTTP协议> 一.HTTP介绍 (1)概述 (2)HTTP版本协议 1.HTTP ...

  6. camunda框架学习(十二)外部任务系列

    目前,外部任务仅camunda框架才有. 一.外部任务抓取锁定使用 <bpmn:serviceTask id="Activity_05ut8e6" name="外部 ...

  7. VOL框架学习(二)使用代码生成器生成菜单和页面

    在使用之前确保前端后端都已正常运行,可以查看VOL框架学习(一)从零开始搭建项目 (一)首先是生成Vue页面 1.使用超级管理员账户登录网站[用户名:admin:密码:123456] 2.点击菜单栏中 ...

  8. ET6.0服务器框架学习笔记(二、一条登录协议)

    ET6.0服务器框架学习笔记(二.一条登录协议) 上一篇主要记录ET6.0的服务器启动功能,本篇主要记录ET6.0完整的一条协议,从配置到生成协议数据,到从客户端发送给服务端,再发送回客户端的流程 文 ...

  9. Spring Boot 框架学习笔记(二)(配置文件与数据注入 yaml基本语法 JSR303数据验证 多环境切换 )

    Spring Boot 框架学习笔记(二) 六.appliaction.properties配置与数据注入 6.1 `@Value`注解 测试注入数据 读取输入流 6.2 读取配置文件数据注入 单文件 ...

  10. PyTorch框架学习二十——模型微调(Finetune)

    PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...

最新文章

  1. Linux的init进程(内核态到用户态的变化)
  2. 数据库:数据库水平切分?垂直切分?整合方案?可能存在的问题?
  3. 21 个非常有用的 .htaccess 提示和技巧
  4. 数学系和物理系学生有什么差别?
  5. Python生成器实现及yield关键字
  6. RabbitMQ-JAVA-ClientAPI示例
  7. MySQL数据库基本操作1
  8. 信息安全技术期末复习总结
  9. 教你如何用两个栈实现一个队列
  10. 易撰微信编辑器使用指南!
  11. 自从有了OJ水题嗅探神器,麻麻再也不担心我刷不到题了。。
  12. JavaScript 技术篇 - 实现一键压缩、格式化js代码实例演示,将js代码压缩为min.js方法,Notepad++工具JSTool插件安装
  13. SCCM 2016安装部署
  14. 如何解决python中文问题_布同:如何解决Python中文问题(总结了多位前人经验,初学者必看)...
  15. 仿照Windows的计算器,编写一个简易的计算器程序,实现加、减、乘、除等运算。
  16. 异次元发卡网邮箱SMTP配置教程
  17. Shell 脚本的详细解读 (三)
  18. 什么是ESB(企业服务总线)
  19. 打开设备管理器出现MMC.EXE被阻止解决办法
  20. 小学学校计算机知识培训方案,小学教师信息技术培训方案范文

热门文章

  1. 计算机十年歌曲,抖音还有多少个十年原唱是谁 歌词一览
  2. 7段数码管动态扫描c语言,7段数码管动态扫描原理及其实现方式
  3. HTTP协议简介和系统命令curl,AIP调用 (ELK中运用)
  4. 设置背景图片自动适应屏幕
  5. Essential Qt 第二十一章 本地目录
  6. iPhone 开发常用工具
  7. nagios 总结_caci 与 nagios 一些总结 【一】
  8. 华为工作十年离职感想
  9. html mp4断点播放,html5解决大文件断点续传
  10. 面试题之消息中间件(MQ与RabbitMQ)