ET服务器框架学习笔记(七)
文章目录
前言
本篇继续记录ET服务器框架的消息通讯方面的内容。
一、先看IMHandler相关
上篇记录的是,消息数据类型本身,这节记录消息处理相关的类
1.IMHandler
IMHandler接口类型,主要定义了两个方法
public interface IMHandler
{
ETVoid Handle(Session session, object message);
Type GetMessageType();
}
- Handle:一个就是消息的处理方法,可以看到是一个异步的ETVoid函数,以为着处理方法是个异步函数,传入一个Session,这里先不深究这个类,可先将它看成一个封装了消息所有上下文信息的类,第二个参数message,就是处理的消息数据类。
- GetMessageType:从定义上只是一个获取消息类型信息的方法,具体的意思需要看后面实现接口的类型。
实现这个接口类型主要分为两个抽象类:AMHandler,AMRpcHandler
1.AMHandler
先看AMHandler类,这个类相比AMRpcHandler更加简单一些,因为这个类型的处理,不需要关心回消息。
public async ETVoid Handle(Session session, object msg):
实现了接口IMHandler的Handle异步方法,具体逻辑为:
- 将传进来的msg首先转换为模板类,在AMHandler类里面为Message,具体应该为实现AMHandler的类的具体数据类。
- 根据数据类,以及session生成一些报错日志,方便调试
- 调用Run方法,将session及具体的数据类传进去
- 实际继承抽象类AMHandler的类型,会实现这个接口,从而走向各自的处理。
public async ETVoid Handle(Session session, object msg)
{
Message message = msg as Message;
if (message == null)
{
Log.Error($"消息类型转换错误: {msg.GetType().Name} to {typeof(Message).Name}");
return;
}
if

本文深入解析ET服务器框架中的消息处理机制,包括IMHandler接口及其子类AMHandler和AMRpcHandler的使用,阐述了消息的异步处理、RPC调用以及错误处理流程。此外,介绍了MessageDispatcherComponent组件的load方法和Handle方法,用于注册消息处理器并分发消息。文章以ping协议为例展示了具体实现,并为后续的协议收发流程奠定了基础。
&spm=1001.2101.3001.5002&articleId=109722511&d=1&t=3&u=ae90953884d04b67a0a8ee6b2c549c12)
1663

被折叠的 条评论
为什么被折叠?



