ET框架学习——消息系统之二
AChannel
AChannel类继承自ComponentWithId。内部保存了一些和网络传输相关的字段(AService,IPEndPoint等),还有两个委托Action<AChannel, int> errorCallback和Action<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框架学习——消息系统之二相关推荐
- ET框架学习——消息系统之七
最近一直在搞这个消息流转路径,做了几张图: Connect&Recive Send 数据包装变化
- 大型网站系统架构系列:分布式消息队列(二)
四.JMS消息服务 讲消息队列就不得不提JMS .JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准/规范,允许应用程序组件基于JavaEE平台创建.发送. ...
- Flask框架flash消息闪现学习与优化符合闪现之名
Flask的flash 第一次知道Flask有flash这个功能时,听这名字就觉得高端,消息闪现-是跳刀blink闪烁躲技能的top10操作吗?可结果让我好失望,哪里有什么闪现的效果,不过是平常的消息 ...
- 苹果框架学习(二) Metal
文章目录 苹果框架学习(二) Metal Metal简介 1. Essentials 1.1 基本任务和概念 1.2 将OpenGL代码迁移到Metal 1.3 将您的Metal代码移植到苹果Arm芯 ...
- 《SpringBoot框架学习二之HTTP协议》
<SpringBoot框架学习二之HTTP协议> 文章目录 <SpringBoot框架学习二之HTTP协议> 一.HTTP介绍 (1)概述 (2)HTTP版本协议 1.HTTP ...
- camunda框架学习(十二)外部任务系列
目前,外部任务仅camunda框架才有. 一.外部任务抓取锁定使用 <bpmn:serviceTask id="Activity_05ut8e6" name="外部 ...
- VOL框架学习(二)使用代码生成器生成菜单和页面
在使用之前确保前端后端都已正常运行,可以查看VOL框架学习(一)从零开始搭建项目 (一)首先是生成Vue页面 1.使用超级管理员账户登录网站[用户名:admin:密码:123456] 2.点击菜单栏中 ...
- ET6.0服务器框架学习笔记(二、一条登录协议)
ET6.0服务器框架学习笔记(二.一条登录协议) 上一篇主要记录ET6.0的服务器启动功能,本篇主要记录ET6.0完整的一条协议,从配置到生成协议数据,到从客户端发送给服务端,再发送回客户端的流程 文 ...
- Spring Boot 框架学习笔记(二)(配置文件与数据注入 yaml基本语法 JSR303数据验证 多环境切换 )
Spring Boot 框架学习笔记(二) 六.appliaction.properties配置与数据注入 6.1 `@Value`注解 测试注入数据 读取输入流 6.2 读取配置文件数据注入 单文件 ...
- PyTorch框架学习二十——模型微调(Finetune)
PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...
最新文章
- arcgis api for flex 开发入门(二)map 的创建
- 当您访问未加密的HTTP网站时,谁能看到您的数据?—Vecloud微云
- 网络组Network Teaming
- POJ - 2186 Popular Cows(强连通缩点)
- DevExpress GridControl 后台设置列
- 在vivado里用rtl描述_如何利用Vivado HLS处理许多位准确或任意精度数据类型
- oracle vm发现无效设置_Oracle数据库编译失效对象相关命令总结大全,值得收藏
- word break II 对字符串根据已知字典 分解出所有可能组合
- 8、Linux基础(四)
- ORACLE取周、月、季、年的開始时间和结束时间
- Nginx默认虚拟主机、 Nginx用户认证、Nginx域名重定向、访问日志·····
- 论文笔记--基于 FCM 聚类的跨模态人物图像标注方法-2015
- ANSYS——模态分析的载荷施加问题以及约束的施加问题
- 计算机需要那些高中数学知识点,高中数学复习知识点有哪些
- Django之jsonp跨域请求原理
- Deployer让部署变得更加的简单
- 【物联网毕设基础】单片机:NEC 协议红外遥控器
- Ubuntu 18.04 无法自动检测耳机解决方法
- 豆豆趣事[2016年06月]
- 《软技能——代码之外的生存指南》笔记
热门文章
- 阅读软件怎么添加书源_「看书+听书」两款神器软件,我已深深的为之折服了...
- 计算机十年歌曲,抖音还有多少个十年能勇敢做热血青年是什么歌
- 父级fixed_父元素设置absolute,子元素设置fixed定位失效
- 1972年发射失败的苏联金星探测器可能今年坠落地球
- Windows10 启动 Docker Desktop 时报错 Containers feature is disabled
- oracle语法基础
- 计算机考研833大纲,考研833之计算机组成与系统结构提纲
- linux开发者的一天
- 曾被尊称为“教父级”人物的郭盛华,现在到底怎么样了?
- mysql主从配置master、slaver