• 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. arcgis api for flex 开发入门(二)map 的创建
  2. 当您访问未加密的HTTP网站时,谁能看到您的数据?—Vecloud微云
  3. 网络组Network Teaming
  4. POJ - 2186 Popular Cows(强连通缩点)
  5. DevExpress GridControl 后台设置列
  6. 在vivado里用rtl描述_如何利用Vivado HLS处理许多位准确或任意精度数据类型
  7. oracle vm发现无效设置_Oracle数据库编译失效对象相关命令总结大全,值得收藏
  8. word break II 对字符串根据已知字典 分解出所有可能组合
  9. 8、Linux基础(四)
  10. ORACLE取周、月、季、年的開始时间和结束时间
  11. Nginx默认虚拟主机、 Nginx用户认证、Nginx域名重定向、访问日志·····
  12. 论文笔记--基于 FCM 聚类的跨模态人物图像标注方法-2015
  13. ANSYS——模态分析的载荷施加问题以及约束的施加问题
  14. 计算机需要那些高中数学知识点,高中数学复习知识点有哪些
  15. Django之jsonp跨域请求原理
  16. Deployer让部署变得更加的简单
  17. 【物联网毕设基础】单片机:NEC 协议红外遥控器
  18. Ubuntu 18.04 无法自动检测耳机解决方法
  19. 豆豆趣事[2016年06月]
  20. 《软技能——代码之外的生存指南》笔记

热门文章

  1. 阅读软件怎么添加书源_「看书+听书」两款神器软件,我已深深的为之折服了...
  2. 计算机十年歌曲,抖音还有多少个十年能勇敢做热血青年是什么歌
  3. 父级fixed_父元素设置absolute,子元素设置fixed定位失效
  4. 1972年发射失败的苏联金星探测器可能今年坠落地球
  5. Windows10 启动 Docker Desktop 时报错 Containers feature is disabled
  6. oracle语法基础
  7. 计算机考研833大纲,考研833之计算机组成与系统结构提纲
  8. linux开发者的一天
  9. 曾被尊称为“教父级”人物的郭盛华,现在到底怎么样了?
  10. mysql主从配置master、slaver