Skip to content

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

消息优先级枚举

枚举值 ​

  • Low
  • Normal
  • High
  • Critical

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

无类型的消息处理委托