An introduction
The message center is designed based on delegates and events (observer mode) and is a sub-module of MxFramework . Mainly to handle the sending and receiving of messages.
2. Message processing center (code as follows)
/***
*
* 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);
}
}
}
}
3. Message processing management (code is as follows)
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. Register message monitoring event
public static void AddMsgListener(string messageType, Action<string, object> handler)
2. Logout message monitoring event
public static void RemoveMsgListener(string messageType, Action<string, object> handler)
3. Log off all message monitoring events
public static void ClearAllMsgListener()
4. Send a message
public static void SendMessage(string messageType, string key, object values)
Five, how to use
1. Send a message
MessageMgr.SendMessage("消息分组", "消息名称", 消息体);
2. Receive messages
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;
}
}
Six, source code structure
1. Core code path (ImportPlugins/MXFramework**/Core/Message)
2. Example project path (Example/04_MessageCenter)
Seven, source download
MxFramework source code: https://github.com/yongliangchen/MXFramework
QQ exchange group: 1079467433