主题
TriggerEncapsulation.Messaging
ITypedMessage 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public interface ITypedMessage强类型消息接口
属性
MessageType 双端
csharp
public string MessageType { get; }Priority 双端
csharp
public MessagePriority Priority { get; }Timeout 双端
csharp
public TimeSpan? Timeout { get; }Timestamp 双端
csharp
public DateTime Timestamp { get; }方法
Serialize 双端
csharp
byte[] Serialize()MessageAcknowledgment 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public class MessageAcknowledgment消息确认数据结构
构造函数
MessageAcknowledgment 双端
csharp
public MessageAcknowledgment()属性
MessageId 双端
csharp
public Guid MessageId { get; set; }Success 双端
csharp
public bool Success { get; set; }ErrorMessage 双端
csharp
public string? ErrorMessage { get; set; }MessageBuilder 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public static class MessageBuilder消息构建器静态工厂 使用模式: 客户端:主要使用 SendToServerAsync() 方法 服务器端:使用完整的广播和目标选择功能
方法
Create 双端
csharp
public static MessageBuilder<T> Create<T>(T data) where T : class创建消息构建器
SendToServerAsync 仅客户端
csharp
public static Task<bool> SendToServerAsync<T>(T data, MessagePriority priority = MessagePriority.Normal) where T : class快速发送消息到服务器(客户端功能)
BroadcastAsync 仅服务端
csharp
public static Task<bool> BroadcastAsync<T>(T data, Func<Player, bool>? filter = null, MessagePriority priority = MessagePriority.Normal) where T : class快速广播消息(服务器端功能)
MessageHandlerAttribute 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public class MessageHandlerAttribute : Attribute消息处理器特性,用于自动注册消息处理方法
构造函数
MessageHandlerAttribute 双端
csharp
public MessageHandlerAttribute()属性
Priority 双端
csharp
public MessagePriority Priority { get; set; }消息处理优先级
IsAsync 双端
csharp
public bool IsAsync { get; set; }是否异步处理
Name 双端
csharp
public string? Name { get; set; }处理器名称(可选,用于调试)
MessagePriority 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public enum MessagePriority消息优先级枚举
枚举值
LowNormalHighCritical
MessageQueueManager 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public class MessageQueueManager : IThinker, IDisposable消息队列管理器,支持优先级和批处理
构造函数
MessageQueueManager 双端
csharp
public MessageQueueManager()属性
DoesThink 双端
csharp
public bool DoesThink { get; set; }方法
EnqueueMessage 双端
csharp
public void EnqueueMessage(ITypedMessage message)将消息加入队列
Dispose 双端
csharp
public void Dispose()Think 双端
csharp
public void Think(int delta)MessageSerializerOptions 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public static class MessageSerializerOptions消息序列化选项
字段
Default 双端
csharp
public static readonly JsonSerializerOptions Default默认的消息序列化选项,直接使用框架统一�?Default
MessageStats 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public class MessageStats消息统计信息
构造函数
MessageStats 双端
csharp
public MessageStats()属性
SentCount 双端
csharp
public int SentCount { get; set; }ReceivedCount 双端
csharp
public int ReceivedCount { get; set; }TotalRecipients 双端
csharp
public int TotalRecipients { get; set; }TotalBytes 双端
csharp
public long TotalBytes { get; set; }AverageMessageSize 双端
csharp
public double AverageMessageSize { get; }AverageRecipientsPerMessage 双端
csharp
public double AverageRecipientsPerMessage { get; }ProtoCustomMessage 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public readonly struct ProtoCustomMessage : IProtocolServerTransient, IProtocolClientTransient, IGameClass表示自定义协议消息,用于在客户端和服务器之间传递任意格式的数据
备注
ProtoCustomMessage 是一个通用的消息传输容器,支持双向通信: 客户端到服务器:使用 SendToServer 方法发送消息 服务器到客户端:使用 Broadcast 或 SendTo 方法发送消息 消息处理流程: 发送方创建 ProtoCustomMessage 实例并设置 Message 属性 调用相应的发送方法(SendToServer、Broadcast 或 SendTo) 接收方的 Handle() 或 Handle(Player) 方法被自动调用 消息内容通过相应的事件(EventServerMessage 或 EventClientMessage)分发给监听器 使用示例: // 服务器端广播消息 var message = new ProtoCustomMessage { Message = Encoding.UTF8.GetBytes("Hello World") }; message.Broadcast(); // 客户端发送消息到服务器 var clientMessage = new ProtoCustomMessage { Message = jsonBytes }; clientMessage.SendToServer(); 注意事项: 消息内容需要自行进行序列化和反序列化 建议使用 JSON、MessagePack 或其他标准化格式进行数据编码 消息大小应该合理控制,避免网络传输压力 服务器端的广播操作会发送给所有在线玩家,注意性能影响
属性
Message 双端
csharp
public byte[] Message { get; init; }获取或设置消息的字节数据内容
备注
消息内容的格式和编码完全由应用程序决定。常见的做法包括: JSON:易于调试和跨平台兼容 MessagePack:高效的二进制格式 Protocol Buffers:Google 的序列化格式 自定义二进制格式:最大化性能优化 建议在消息前添加类型标识符,以便接收方能够正确解析不同类型的消息。
方法
Handle 仅客户端
csharp
public void Handle()处理从服务器接收到的自定义消息
备注
此方法在客户端自动被调用,当从服务器接收到 ProtoCustomMessage 时执行。 该方法会触发 EventServerMessage 事件,将消息内容传递给注册的监听器。 事件处理流程: 网络层接收到消息并识别为 ProtoCustomMessage 类型 框架自动调用此 Handle 方法 方法获取 EventServerMessage 事件发布器 触发事件,将 Message 内容传递给所有监听器 应用程序应该注册 EventServerMessage 事件的监听器来处理具体的消息内容。
SendToServer 仅客户端
csharp
public bool SendToServer()将自定义消息发送到服务器
返回: 如果消息成功发送则返回 true;否则返回 false
备注
此方法用于从客户端向服务器发送自定义消息。消息会通过网络传输层发送, 并在服务器端触发相应的 Handle(Player) 方法。 发送流程: 客户端调用 SendToServer 方法 框架将消息打包并通过网络发送到服务器 服务器接收消息并调用 Handle(Player) 方法 服务器端触发 EventClientMessage 事件 返回值说明: true:消息已成功提交到网络发送队列 false:发送失败,可能是网络断开或其他错误 注意:返回 true 只表示消息已提交发送,不保证服务器已成功接收。
Handle 仅服务端
csharp
public void Handle(Player player)处理从客户端接收到的自定义消息
player— 发送此消息的玩家对象。可用于: 验证玩家权限 获取玩家状态信息 向特定玩家发送回复消息 记录玩家操作日志
备注
此方法在服务器端自动被调用,当从客户端接收到 ProtoCustomMessage 时执行。 该方法会触发 EventClientMessage 事件,将消息内容和发送者信息传递给注册的监听器。 事件处理流程: 网络层接收到来自客户端的消息 框架识别消息类型并调用此 Player) 方法 方法获取 EventClientMessage 事件发布器 触发事件,传递发送者()和消息内容 服务器应用程序应该注册 EventClientMessage 事件的监听器来处理客户端消息。 通过事件参数可以获取发送消息的玩家信息,实现基于玩家的消息处理逻辑。
Broadcast 仅服务端
csharp
public int Broadcast(Func<Player, bool>? filter = null)向所有符合条件的玩家广播自定义协议消息
filter— 可选的玩家过滤条件。如果提供,只有通过过滤器的玩家才会接收到消息。 如果为null,则向所有在线玩家广播。
返回: 成功发送消息的玩家数量
备注
此方法用于向多个玩家同时发送消息,常用于游戏状态更新、全局通知等场景。 消息会被发送到所有在线玩家,可以通过过滤器函数来限制接收范围。 性能注意事项: 广播操作会遍历所有在线玩家,玩家数量较多时可能影响性能 建议控制广播频率,避免过于频繁的全局消息发送 对于大量数据的广播,考虑使用分批发送或优化消息内容 过滤器使用: 过滤器函数接收 Player 参数,返回 true 表示该玩家应接收消息 可以基于玩家等级、位置、队伍等条件进行过滤 过滤器在每个玩家的发送过程中都会被调用
SendTo 仅服务端
csharp
public bool SendTo(Player player, Func<Player, bool>? filter = null)向指定玩家发送自定义协议消息
player— 目标玩家实例filter— 可选的额外过滤条件。即使指定了目标玩家,仍需要通过此过滤器才能发送消息。 如果为null,则直接发送给目标玩家。
返回: 如果消息成功发送则返回 true;否则返回 false
备注
此方法用于向特定玩家发送消息,常用于个人通知、私聊消息、个性化数据更新等场景。 消息通过玩家的槽控制器(SlotController)发送,确保消息能够正确路由到目标客户端。 发送流程: 检查目标玩家是否有效和在线 如果提供了过滤器,验证玩家是否通过过滤条件 通过玩家的槽控制器发送消息 返回发送结果 返回值说明: true:消息已成功提交到该玩家的发送队列 false:发送失败,可能原因包括玩家离线、网络问题或过滤器拒绝 额外过滤器的用途: 动态权限检查:验证玩家是否有权接收特定类型的消息 状态验证:确保玩家处于合适的游戏状态 防重复发送:避免向已处理过的玩家重复发送
ReliableMessage 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public class ReliableMessage<T> : IReliableMessage where T : class可靠消息数据结构
构造函数
ReliableMessage 双端
csharp
public ReliableMessage()属性
Id 双端
csharp
public Guid Id { get; set; }Data 双端
csharp
public T Data { get; set; }RequireAck 双端
csharp
public bool RequireAck { get; set; }Timestamp 双端
csharp
public DateTime Timestamp { get; set; }方法
SendToAsync 双端
csharp
public Task<bool> SendToAsync(Player recipient)ReliableMessageSender 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public class ReliableMessageSender : IDisposable可靠消息发送器,支持确认和重试
构造函数
ReliableMessageSender 双端
csharp
public ReliableMessageSender()方法
SendReliableAsync 双端
csharp
public Task<bool> SendReliableAsync<T>(T data, Player recipient, TimeSpan? timeout = null) where T : class可靠发送消息
OnMessageAcknowledged 双端
csharp
public void OnMessageAcknowledged(Guid messageId)处理消息确认
Dispose 双端
csharp
public void Dispose()TypedMessage 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public class TypedMessage<T> : ITypedMessage where T : class强类型消息基类,提供自动序列化和类型安全的消息传递
构造函数
TypedMessage 双端
csharp
public TypedMessage(T data)创建强类型消息
data— 消息数据
TypedMessage 双端
csharp
public TypedMessage()创建空的强类型消息(需要手动设置Data)
属性
Data 双端
csharp
public T Data { get; set; }消息数据
Priority 双端
csharp
public MessagePriority Priority { get; set; }消息优先级
Timeout 双端
csharp
public TimeSpan? Timeout { get; set; }消息超时时间(可选)
Timestamp 双端
csharp
public DateTime Timestamp { get; }消息时间戳
MessageType 双端
csharp
public string MessageType { get; }消息类型名称
MessageId 双端
csharp
public Guid MessageId { get; }消息ID(用于追踪和去重)
方法
Serialize 双端
csharp
public byte[] Serialize()序列化消息为字节数组
Deserialize 双端
csharp
public static TypedMessage<T>? Deserialize(byte[] data)从字节数组反序列化消息
SendToServer 仅客户端
csharp
public bool SendToServer()客户端发送消息到服务器
SendToServerAsync 仅客户端
csharp
public Task<bool> SendToServerAsync()异步发送消息到服务器
ToString 双端
csharp
public override string ToString()SendTo 仅服务端
csharp
public bool SendTo(Player player)向指定玩家发送消息
SendToAsync 仅服务端
csharp
public Task<bool> SendToAsync(Player player)异步向指定玩家发送消息
Broadcast 仅服务端
csharp
public void Broadcast(Func<Player, bool>? filter = null)广播消息给所有玩家
BroadcastAsync 仅服务端
csharp
public Task BroadcastAsync(Func<Player, bool>? filter = null)异步广播消息
TypedMessageHandler 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public static class TypedMessageHandler强类型消息处理器管理器
方法
Initialize 双端
csharp
public static void Initialize()初始化消息处理器系统
Register 双端
csharp
public static void Register<T>(TypedMessageHandlerDelegate<T> handler, MessagePriority priority = MessagePriority.Normal, string? name = null) where T : class手动注册消息处理器
GetHandlerStats 双端
csharp
public static IReadOnlyDictionary<Type, int> GetHandlerStats()获取处理器统计信息
RemoveHandlers 双端
csharp
public static bool RemoveHandlers<T>() where T : class移除指定类型的所有处理器
ClearAllHandlers 双端
csharp
public static void ClearAllHandlers()清除所有处理器
TypedMessageHandlerDelegate 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public delegate TypedMessageHandlerDelegate<in T> where T : class消息处理委托
TypedMessageMetrics 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public static class TypedMessageMetrics消息指标收集器
方法
RecordMessageSent 双端
csharp
public static void RecordMessageSent(string messageType, int recipientCount, int messageSize)RecordMessageReceived 双端
csharp
public static void RecordMessageReceived(string messageType, int messageSize)GetStats 双端
csharp
public static IReadOnlyDictionary<string, MessageStats> GetStats()Reset 双端
csharp
public static void Reset()UntypedMessageHandlerDelegate 双端
命名空间 TriggerEncapsulation.Messaging
csharp
public delegate UntypedMessageHandlerDelegate无类型的消息处理委托