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

2024-04-16 21:58
文章标签 系统 学习 框架 消息 et

本文主要是介绍ET框架学习——消息系统之一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       OpcodeTypeComponent组件和MessageDispatherComponent组件都是消息系统的组成部分。这里就来好好捋一捋ET的消息系统。从我目前看到现在来说,这个消息系统包括一系列的事件接口,特性,和消息类型的识别码等等部分,这里先撇开前后端通讯部分的消息。

  • 消息系统中的抽象类,接口

public interface IMHandler
{void Handle(Session session, object message);Type GetMessageType();
}

        IMHandler接口是一个比较基本的接口,可以看到其内部有一个Hadle方法和一个GetMessageType方法。Handle方法接受Sessionobject两个类型的参数。这两个方法在MessageDispatherComponent类中都被执行了,具体可以看我的这篇文章。

public abstract class AMHandler<Message> : IMHandler where Message: class
{protected abstract void Run(Session session, Message message);public void Handle(Session session, object msg){Message message = msg as Message;if (message == null){Log.Error($"消息类型转换错误: {msg.GetType().Name} to {typeof(Message).Name}");return;}if (session.IsDisposed){Log.Error($"session disconnect {msg}");return;}this.Run(session, message);}public Type GetMessageType(){return typeof(Message);}
}

       AMHandler抽象类内部有一个抽象方法Run和一个Handle方法,Handle方法会在判断消息内部不为空后执行Run方法。Module层和Hotfix层,Handle的调用时机不是尽然相同的,Module层是在Module.Session中调用,Hotfix层是在Hotfix.Session中调用。该类的作用在于将接受服务端消息的方法,包装成类,配合MessageHandlerAttribute特性来做一个区分,便于反射来收集。

public interface IRequest: IMessage
{int RpcId { get; set; }
}public interface IResponse : IMessage
{int Error { get; set; }string Message { get; set; }int RpcId { get; set; }
}

       IMessage接口是一个空接口,可以不用理会,两个接口都实现了IMessage接口。单单从接口名字上来看,IRequest接口应该使用与请求消息的,里面一个RpcId的属性。IResponse接口是响应消息的,定义了Error错误码属性,Message消息内容属性,RpcId属性。

public interface IMessageDispatcher
{void Dispatch(Session session, ushort opcode, object message);
}

      IMessageDispatcher接口,应该是用于派发消息的接口。里面有一个派发消息的方法Dispatch

  • 消息系统中的特性

public class MessageAttribute: BaseAttribute
{public ushort Opcode { get; }public MessageAttribute(ushort opcode){this.Opcode = opcode;}
}

       MessageAttribute特性中有一个Opcode,这是为特性修饰的类分配的消息类型的识别码,在指定特性的时候会直接分配。

public class MessageHandlerAttribute : BaseAttribute
{public AppType Type { get; }public MessageHandlerAttribute(){}public MessageHandlerAttribute(AppType appType){this.Type = appType;}
}

       MessageHandlerAttribute特性中有一个AppType类型的Type值,AppType是一个枚举,具体可以自己去看看,这个枚举使用了Flags特性,关于该特性,可以看这篇文章。

 

这篇关于ET框架学习——消息系统之一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910004

相关文章

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.