ET服务器框架学习笔记(七)

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

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值