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