介绍
在阅读了罗培羽著作的Unity3D网络游戏实战一书后,博主综合自己的开发经验与考虑进行部分修改和调整,将通用的客户端网络模块和通用的服务端框架进行提取,形成专栏,介绍Socket网络编程,希望对其他人有所帮助。目录如下:
一、通用服务端框架
(一)、定义套接字和多路复用
(二)、客户端信息类和通用缓冲区结构
(三)、Protobuf 通信协议
(四)、数据处理和关闭连接
(五)、Messenger 事件发布、订阅系统
(六)、单点发送和广播数据
(七)、时间戳和心跳机制
二、通用客户端网络模块
(一)、Connect 连接服务端
(二)、Receive 接收并处理数据
(三)、Send 发送数据
(四)、Close 关闭连接
本篇内容:
namespace SK.Framework
{
///
/// 消息发布、订阅系统
///
public class Messenger
{
public delegate void MessageEvent(params object[] args);
private static readonly Dictionary msgDic = new Dictionary();
///
/// 发布消息
///
/// 消息Key值
/// 参数
public static void Publish(string msgKey, params object[] args)
{
if (msgDic.ContainsKey(msgKey))
{
msgDic[msgKey].Invoke(args);
}
}
///
/// 订阅消息
///
/// 消息Key值
/// 订阅事件
public static void Subscribe(string msgKey, MessageEvent messageEvent)
{
if (msgDic.ContainsKey(msgKey))
{
msgDic[msgKey] += messageEvent;
}
else
{
msgDic[msgKey] = messageEvent;
}
}
///
/// 取消订阅
///
/// 消息Key值
/// 订阅事件
public static void Unsubscribe(string msgKey, MessageEvent messageEvent)
{
if (msgDic.ContainsKey(msgKey))
{
msgDic[msgKey] -= messageEvent;
if (msgDic[msgKey] == null)
{
msgDic.Remove(msgKey);
}
}
}
}
}
参考资料:《Unity3D网络游戏实战》(第2版)罗培羽 著