04_消息中心(MessageCenter)

一介绍

该消息中心是基于委托和事件(观察者模式)设计的,是 MxFramework框架 的一个子模块。 主要是为了处理消息的收发。

 

二、消息处理中心(代码如下)

/***
 * 
 *    Title: MXFramework
 *           主题: 消息中心
 *    Description: 
 *           功能:负责消息的收发
 *                                  
 *    Date: 2020
 *    Version: v4.0版本
 *    Modify Recoder:      
 *
 */

using System.Collections.Generic;
using UnityEngine;
using System;

namespace Mx.Msg
{
    /// <summary>消息中心</summary>
    public class MessageCenter : MonoBehaviour
    {
        /// <summary>消息中心缓存集合</summary>
        public static Dictionary<string, Action<string, object>> dicMessages = new Dictionary<string, Action<string, object>>();

        /// <summary>
        /// 添加消息的监听
        /// </summary>
        /// <param name="messageType">消息分组</param>
        /// <param name="handler">消息委托</param>
        public static void AddMsgListener(string messageType, Action<string, object> handler)
        {
            if(!dicMessages.ContainsKey(messageType))
            {
                dicMessages.Add(messageType, null);
            }
            dicMessages[messageType] += handler;
        }

        /// <summary>
        /// 取消消息监听
        /// </summary>
        /// <param name="messageType">消息分组</param>
        /// <param name="handler">消息委托</param>
        public static void RemoveMsgListener(string messageType, Action<string, object> handler)
        {
            if(dicMessages.ContainsKey(messageType))
            {
                dicMessages[messageType] -= handler;
            }
        }

        /// <summary>
        /// 取消所有的消息监听
        /// </summary>
        public static void ClearAllMsgListener()
        {
            if(dicMessages!=null)
            {
                dicMessages.Clear();
            }
        }

        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="messageType">消息分组</param>
        /// <param name="key">消息名称</param>
        /// <param name="values">消息体</param>
        public static void SendMessage(string messageType,string key,object values)
        {
            Action<string, object> del;
            dicMessages.TryGetValue(messageType, out del);
            if(del!=null)
            {
                del(key,values);
            }
        }

    }
}

 

三、消息处理管理(代码如下) 

using System;
using UnityEngine;

namespace Mx.Msg
{
    /// <summary>消息管理</summary>
    public class MessageMgr : MonoBehaviour
    {
        /// <summary>
        /// 添加消息的监听
        /// </summary>
        /// <param name="messageType">消息分组</param>
        /// <param name="handler">消息委托</param>
        public static void AddMsgListener(string messageType, Action<string, object> handler)
        {
            MessageCenter.AddMsgListener(messageType, handler);
        }

        /// <summary>
        /// 取消消息监听
        /// </summary>
        /// <param name="messageType">消息分组</param>
        /// <param name="handler">消息委托</param>
        public static void RemoveMsgListener(string messageType, Action<string, object> handler)
        {
            MessageCenter.RemoveMsgListener(messageType, handler);
        }

        /// <summary>
        /// 取消所有的消息监听
        /// </summary>
        public static void ClearAllMsgListener()
        {
            MessageCenter.ClearAllMsgListener();
        }

        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="messageType">消息分组</param>
        /// <param name="key">消息名称</param>
        /// <param name="values">消息体</param>
        public static void SendMessage(string messageType, string key, object values)
        {
            MessageCenter.SendMessage(messageType, key, values);
        }

        /// <summary>
        /// 发送给指定UI消息
        /// </summary>
        /// <param name="uIFormType">接收消息UI面板</param>
        /// <param name="key">消息名称</param>
        /// <param name="values">消息体</param>
        //public static void SendMessageToUIForm(EnumUIFormType uIFormType, string key, object values)
        //{
        //    MessageCenter.SendMessage(uIFormType.ToString() + "Msg", key, values);
        //}
    }
}

 

四、API 

1.注册消息监听事件

 public static void AddMsgListener(string messageType, Action<string, object> handler)

2.注销消息监听事件

 public static void RemoveMsgListener(string messageType, Action<string, object> handler)

3.注销所有消息监听事件

 public static void ClearAllMsgListener()

4.发送消息

 public static void SendMessage(string messageType, string key, object values)

 

五、如何使用

1.发送消息

MessageMgr.SendMessage("消息分组", "消息名称", 消息体);

2.接收消息

        private void Awake()
        {
            //注册事件>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            MessageMgr.AddMsgListener("消息分组", OnTestMessageCenterEvent);
        }

        private void OnDestroy()
        {
            //记得有注册就会有注销>>>>>>>>>>>>>>>>>>>>
            MessageMgr.RemoveMsgListener("消息分组", OnTestMessageCenterEvent);
        }

        /// <summary>
        /// 监听测试消息中心数据
        /// </summary>
        /// <param name="key">数据名称</param>
        /// <param name="values">具体的数值</param>
        private void OnTestMessageCenterEvent(string key, object values)
        {
            switch (key)
            {
               case"消息名称":
               
               数据类型 msg=(数据类型) values;
               break;
            }
        }

 

六、源码结构

1.核心代码路径(ImportPlugins/MXFramework**/Core/Message)

2.示例工程路径(Example/04_MessageCenter)

 

七、源码下载

MxFramework 源码: https://github.com/yongliangchen/MXFramework

QQ 交流群:1079467433

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 C# 中,可以使用事件和委托来实现消息处理分发框架。具体地说,消息处理分发框架包括以下几个步骤: 1. 定义消息类型:首先需要定义消息的类型。可以使用类或结构体来表示消息消息中包含了需要传递的数据。 2. 声明委托类型:为了让消息处理程序能够注册到消息中心,需要声明一个委托类型,该委托类型包含了消息处理程序的签名。 3. 定义事件类型:使用事件来实现消息中心,需要定义一个事件类型,该事件类型包含了委托类型的实例。 4. 注册消息处理程序:消息处理程序需要注册到消息中心,即将其实例化,并将其添加到事件的委托列表中。 5. 发布消息:发送消息时,需要创建消息的实例,并将其作为参数传递给事件,事件会自动调用所有注册的委托来处理消息。 下面是一个示例代码,演示了如何实现消息处理分发框架: ```csharp // 定义消息类型 public class MyMessage { public string Data { get; set; } } // 声明委托类型 public delegate void MyMessageHandler(object sender, MyMessage message); // 定义事件类型 public class MessageCenter { public event MyMessageHandler MyMessageReceived; public void OnMyMessageReceived(MyMessage message) { MyMessageReceived?.Invoke(this, message); } } // 注册消息处理程序 public class MyMessageHandler1 { public void HandleMyMessage(object sender, MyMessage message) { Console.WriteLine($"MyMessageHandler1 received message: {message.Data}"); } } public class MyMessageHandler2 { public void HandleMyMessage(object sender, MyMessage message) { Console.WriteLine($"MyMessageHandler2 received message: {message.Data}"); } } // 发布消息 var messageCenter = new MessageCenter(); var handler1 = new MyMessageHandler1(); var handler2 = new MyMessageHandler2(); messageCenter.MyMessageReceived += handler1.HandleMyMessage; messageCenter.MyMessageReceived += handler2.HandleMyMessage; var message = new MyMessage { Data = "Hello, world!" }; messageCenter.OnMyMessageReceived(message); ``` 上述代码定义了一个 `MyMessage` 类型的消息,声明了一个委托类型 `MyMessageHandler`,并定义了一个 `MessageCenter` 类型的事件来实现消息中心。还定义了两个消息处理程序 `MyMessageHandler1` 和 `MyMessageHandler2`,它们实现了 `MyMessageHandler` 委托的签名。最后,通过将两个消息处理程序注册到事件中心,来处理 `MyMessage` 类型的消息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DaLiangChen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值