您当前的位置: 首页 >  unity

幻世界

暂无认证

  • 3浏览

    0关注

    237博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【HSJFramework】Unity事件发送机制IMessageHandler

幻世界 发布时间:2019-09-19 14:59:28 ,浏览量:3

目录

一.编写接口

二.实现接口

三.定义消息结构

四.消息管理器MessageDispatcher的维护

五.消息类型规则

六.继承MessageHandler监听消息

七.使用 

一.编写接口

编写处理消息的接口类和接口方法,当消息分发后,根据消息类型处理当前消息逻辑

public interface IMessageHandler {
    void HandleMessage(Messages messages);
}
二.实现接口

实现接口方法,初始化当前Handler,把当前handler注册进消息管理器,生命周期结束的时候Detach剔除

public class MessageHandler : MonoBehaviour, IMessageHandler
{
    protected  void Awake()
    {
        MessageDispatcher.Attach(this);
    }
    public virtual void HandleMessage(Messages messages)
    {

    }
    protected  void OnDestroy()
    {
        MessageDispatcher.Detach(this);
    }
}
三.定义消息结构

一般我们会定义一个消息类型MesageType,主要是根据这个消息类型来分发和接收消息。另外一个就是定义消息体object,可以为任何类型的数据,当我们接收到数据后转化为我们需要的类型即可

public class Messages{
    public string Type { get; private set; }
    public object Data { get; private set; }

    public Messages()
    {

    }
    public Messages(string type,object data) {
        this.Type = type;
        this.Data = data;
    }
}
四.消息管理器MessageDispatcher的维护

我们需要定义一个消息处理助手的list来存储所有可以接收消息的助手模块,

还要声明一个注册添加进这个list的函数和剥离剔除的函数

public class MessageDispatcher{
    private static  List messageHandlers = new List();

    /// 注册消息
    public static void Attach(IMessageHandler messageHandler)
    {
        if (messageHandlers.IndexOf(messageHandler) == -1)
        {
            messageHandlers.Add(messageHandler);
        }
    }
    
    /// 消息事件分发
  public static void Dispatch(string type,object data = null)
    {
        Messages msg = new Messages(type, data);
        for (int i = 0; i < messageHandlers.Count; i++)
        {
            messageHandlers[i].HandleMessage(msg);
        }
    }

    /// 移除注册的消息
    public static void Detach(IMessageHandler handler)
    {
        if (messageHandlers != null)
        {
            messageHandlers.Remove(handler);
        }
    }
五.消息类型规则

消息类型的定义规则,尽可能的使名字贴近当前消息目的

  public const string ShowMainView = "Show_Main_View";
    public const string HideMainView = "Hide_Main_View";

    public const string ShowLoginView = "Show_Login_View";
    public const string HideLoginView = "Hide_Login_View";
六.继承MessageHandler监听消息

需要监听消息的对象必须继承MessageHandler,并重写HandleMessage方法

 public override void HandleMessage(IMessages messages)
    {
        base.HandleMessage(messages);
        switch(messages.Type)
        {
            case MessagesType.ShowErrorView:
              
            case MessagesType.HideErrorView:
                
            default:
                break;
        }
    }
七.使用 
MessageDispatcher.Dispatch(MessageTypes.HideErrorView);

关注
打赏
1660704426
查看更多评论
立即登录/注册

微信扫码登录

0.0410s