一介绍
该消息中心是基于委托和事件(观察者模式)设计的,是 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