04_Message Center (MessageCenter)

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

Guess you like

Origin blog.csdn.net/a451319296/article/details/109057994