04_消息中心(MessageCenter)

article/2025/9/1 12:54:20

一介绍

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


http://chatgpt.dhexx.cn/article/qI6eWCHS.shtml

相关文章

实际项目中的消息中心

前一篇文章讲到我们项目的工作流&#xff0c;这一篇我们扒一扒项目中的消息中心&#xff0c;msgcenter。消息可以分成很多种消息&#xff1a;留存可重复查看的DB消息&#xff0c;短暂保存在redis的comet消息&#xff0c;短信形式的msg消息&#xff0c;推送到手机的push消息等等…

消息中心

1 系统结构 消息中心体系结构如下图所示&#xff1a; 图中红色线表示移动消息的推送路径。 此结构适用于企业消息中心&#xff0c;也适用于平台&#xff0c;消息推送代理的消息推送服务接口&#xff08;Web Service&#xff09;可以作为开放服务。 本地服务器是消息源。…

消息中心(系统消息)实现

需求 用户能即时的收到来自系统或者其他用户发来的消息&#xff0c;在web界面右下角弹窗提醒&#xff0c;用户还能标记消息是否已阅状态。 即时通讯 概念&#xff1a;即时通讯&#xff08;实时通信&#xff0c;Instant Messaging&#xff0c;简称IM&#xff09;是一个实时通…

消息中心设计

1 参考文档 产品参考&#xff1a;消息通知系统设计 | 人人都是产品经理 (woshipm.com) 2 消息中心目标职责 消息中心仅作为消息发送使用&#xff0c;跟业务没有任何关系&#xff0c;涉及到业务部分有业务系统自行处理&#xff1b;消息中心的功能只有消息生产、消息展示、消息推…

如何设计一个消息中心

如今的内容型产品&#xff0c;不管提供的是什么类型的内容&#xff0c;在其主功能之外&#xff0c;不可避免的会有另一个十分重要的功能——消息中心。 而无论是信息流、论坛、信箱&#xff0c;还是私聊、群聊、通知&#xff0c;推拉模型是内容型&#xff08;包括&#xff1a;社…

聊聊消息中心的设计与实现逻辑

厌烦被消息打扰&#xff0c;又怕突然间的安静&#xff1b; 一、业务背景 微服务的架构体系中&#xff0c;会存在很多基础服务&#xff0c;提供一些大部分服务都可能需要的能力&#xff0c;比如文件管理、MQ队列、缓存机制、消息中心等等&#xff0c;这些服务需要提供各种可以复…

4. 消息中心的设计与实现

消息中心的设计与实现 一、引言 运用场景&#xff1a; 1、消息的主动提醒&#xff08;客户端被动接收&#xff09; 2、客户模块&#xff08;及时通讯&#xff09; 3、单一登录&#xff08;一个账号只能在一个设备登录&#xff09; 消息中心的实现方案&#xff1a; 1、客户端轮…

mysql格式化数字去掉千分位

前言 使用format格式化数字时&#xff0c;超过1000就会有千分位&#xff0c;但有时我们不希望有这个千分位&#xff0c;那怎么去掉呢&#xff1f; 1. select format(11111.123,2) 2. select convert(11111.123,decimal(12,2))

upper mysql_MySQL函数

MySQL函数 Lower 转换小写 upper 转换大写 substr 取子串(substr(被截取的字符串,起始下标,截取的长度)) length 取长度 trim 去空格 str_to_date 将字符串转换成日期 date_format 格式化日期 format 设置千分位 round 四舍五入 rand() 生成随机数 Ifnull 可以将null转换成一个…

MySql FORMAT 去掉千位分隔符,

加上墨西哥的地区参数即可 SELECT FORMAT(35555566.8, 2, es_MX) AS value; 结果

MySQL知识总结

目录 知识点条件查询排序常见单行处理函数&#xff08;可嵌套&#xff09;多行处理函数分组查询distinct去重 连接查询⭐⭐⭐⭐⭐内连接外连接多表连接&#xff08;两张表以上&#xff09; 子查询where子句中的子查询from 子句中的子查询select后面出现的子查询 union合并查询结…

MySQL知识点

总结汇总MySQL数据库面试题&#xff08;2020最新版&#xff09;_ThinkWon的博客-CSDN博客_mysql数据库面试题 1. 索引 &#xff08;1&#xff09;主键索引 唯一非空&#xff0c;属于聚簇索引 &#xff08;2&#xff09;唯一索引 unique 可为空(多个null也可) &#xff08;3&…

mysql 处理金额_MYSQL处理金额相关函数

1.FORMAT()数字千分位分割 FORMAT(X,D) 1.X需要格式化的数字 2.D保留小数位数 例:SELECT FORMAT(12334555.213,2) 2.ABS() 求绝对值 ABS(X) SELECT ABS(-23); SELECT ABS(21-23); SELECT ABS(23); 3.四舍五入保留小数 ROUND(X,D) 1.X需要格式化的数字 2.D保留小数位数(不写时默…

C语言字符数组的输入和输出

字符数组的输入输出有两种方法&#xff1a; &#xff08;1&#xff09;逐个字符输入输出。用格式符“%c”输入或输出一个字符。例如 int main() {char c[6]; //定义一个字符串for (int i 0; i < 5; i){scanf("%c", &c[i]); //输入字符串}for (int i 0; …

C语言 | 字符数组

C语言字符数组的定义 字符数组是用来存放字符数据的数组&#xff0c;字符数组中的一个元素存放一个字符&#xff0c;定义字符数组的方法和定义数值型数组的方法类似。 //例子&#xff1a;char character[10];C语言字符数组的初始化 C语言对字符数组初始化&#xff0c;最容易理解…

C语言,字符数组与字符串

文章目录 字符数组基本介绍字符串注意事项字符串的访问和遍历字符串的表示形式用字符数组存放一个字符串&#xff1a; 用字符数组存放一个字符串,用字符指针指向一个字符串使用字符指针变量和字符数组两种方法表示字符串的讨论 字符串相关函数常用字符串函数一览字符串函数应用…

浅谈字符数组

文章目录 一、什么是字符数组二、字符数组的定义和赋值1. 先定义一个数组&#xff0c;再为挨个元素进行赋值2. 在定义的同时给该字符数组进行初始化2.1 错误的初始化方式2.2 正确的初始化方式 3. 特别注意&#xff01;&#xff01;&#xff01;3.1 字符数组和整型数组一样不支持…

字符数组

字符数组 用来存放字符数据的数组是字符数组。字符数组中的每一个元素存放一个字符&#xff0c;其定义和使用方法与其他类型的数据基本相似。 1.1字符数组的定义和使用 字符数组的定义与其他类型的数组类似&#xff0c;标准形式如下&#xff1a; Char 数组名 【常量表达式】 …

Stata:嵌套Logit模型(NestedLogit)

原文链接&#xff1a;https://www.lianxh.cn/news/d5e00bfb17a7c.html 致谢&#xff1a; 这篇推文的核心内容主要来自陈强老师编著的《高级计量经济学及 Stata 应用》一书&#xff0c;特此致谢。 1. 简介 此前&#xff0c;连享会发布了一系列离散选择模型相关的推文&#xff0…

MNL——多项Logit模型学习笔记(二)

本节将会通过案例举例&#xff0c;介绍Logit模型的建模思路和过程 内容为摘抄他人学习资料的个人学习笔记&#xff0c;如有侵权则删 1.正确打开/解读Logit模型系数的方式 本节的具体内容在笔记里不详细表示了&#xff0c;大家在软件里拟合Logit模型时&#xff0c;对于其中的参…