using System; using System.Collections.Generic; using AX.Common; namespace AX.MessageSystem { /// /// 通信系统所用的消息类型,可在游戏内进行通知。 /// internal sealed class Message : IMessage { /// /// 表示消息的类型。其实类似于消息的 ID,用于表示哪种消息。 /// /// /// 为什么不用整型呢?诚然用整型分发消息性能更高,内存占用更低,但数字不易阅读和理解。 /// 而字符串类型则既可以任意表达,又容易阅读和理解。 /// public string Type { get; set; } /// /// 表示消息的分发渠道。 /// public string[] Filters { get; set; } /// /// 表示消息的发送方。 /// public object Sender { get; set; } /// /// 表示延迟处理消息的时间,按秒计。 /// public float Delay { get; set; } /// /// 表示消息的附加数据。 /// public object Data { get; set; } /// /// 表示消息是否已发送。 /// public bool IsSent { get; set; } /// /// 表示消息是否已处理过。 /// public bool IsHandled { get; set; } /// /// 清空消息。 /// public void Clear() { this.Type = default(string); this.Filters = default(string[]); this.Sender = default(object); this.Data = default(object); this.Delay = default(float); this.IsSent = default(bool); this.IsHandled = default(bool); } private static readonly ObjectPool pool = new ObjectPool(4, () => new Message()); /// /// 获取一个消息实例。 /// public static Message Acquire() { return pool.Acquire(); } /// /// 释放一个消息实例。 /// /// public static void Release(Message message) { if (message == null) return; message.Clear(); pool.Release(message); } } }