介绍
在阅读了罗培羽著作的Unity3D网络游戏实战一书后,博主综合自己的开发经验与考虑进行部分修改和调整,将通用的客户端网络模块和通用的服务端框架进行提取,形成专栏,介绍Socket网络编程,希望对其他人有所帮助。目录如下:
一、通用服务端框架
(五)、Messenger 事件发布、订阅系统
二、通用客户端网络模块
本篇内容:
namespace SK.Framework
{
/// <summary>
/// 消息发布、订阅系统
/// </summary>
public class Messenger
{
public delegate void MessageEvent(params object[] args);
private static readonly Dictionary<string, MessageEvent> msgDic = new Dictionary<string, MessageEvent>();
/// <summary>
/// 发布消息
/// </summary>
/// <param name="msgKey">消息Key值</param>
/// <param name="arg">参数</param>
public static void Publish(string msgKey, params object[] args)
{
if (msgDic.ContainsKey(msgKey))
{
msgDic[msgKey].Invoke(args);
}
}
/// <summary>
/// 订阅消息
/// </summary>
/// <param name="msgKey">消息Key值</param>
/// <param name="messageEvent">订阅事件</param>
public static void Subscribe(string msgKey, MessageEvent messageEvent)
{
if (msgDic.ContainsKey(msgKey))
{
msgDic[msgKey] += messageEvent;
}
else
{
msgDic[msgKey] = messageEvent;
}
}
/// <summary>
/// 取消订阅
/// </summary>
/// <param name="msgKey">消息Key值</param>
/// <param name="messageEvent">订阅事件</param>
public static void Unsubscribe(string msgKey, MessageEvent messageEvent)
{
if (msgDic.ContainsKey(msgKey))
{
msgDic[msgKey] -= messageEvent;
if (msgDic[msgKey] == null)
{
msgDic.Remove(msgKey);
}
}
}
}
}
参考资料:《Unity3D网络游戏实战》(第2版)罗培羽 著

该篇博客介绍了基于Unity3D的网络编程中,通用服务端框架中的Messenger事件发布、订阅系统。 Messenger类包含发布、订阅和取消订阅方法,用于在客户端和服务端之间传递消息。通过键值对存储消息事件,便于管理和调度网络通信中的数据交互。
372

被折叠的 条评论
为什么被折叠?



