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