using System.Collections.Concurrent; using Milimoe.FunGame.Core.Library.Server; namespace Milimoe.FunGame.Core.Service { internal class ModelManager { /// /// 目前的Model数量 /// internal int Count => Models.Count; /// /// 最大接受的Model数量 /// private int MaxModel { get; } /// /// 可参与高并发的字典,但添加效率较低 /// private ConcurrentDictionary Models { get; } = new(); /// /// Init ModelManager /// /// MaxModel internal ModelManager(int MaxModel = 0) { if (MaxModel <= 0) this.MaxModel = Library.Constant.General.MaxTask_2C2G; else { this.MaxModel = MaxModel; } } /// /// 获取Model对象 /// /// Model的Key /// Model对象 internal BaseModel this[string name] => Models[name]; /// /// 向Model管理器中添加Model /// /// Model的Key /// Model对象 /// True:操作成功 internal bool Add(string name, BaseModel t) { if (Models.Count + 1 > MaxModel) return false; return Models.TryAdd(name, t); } /// /// 从Model管理器中移除Model /// /// Model的Key /// True:操作成功 internal bool Remove(string name) { return Models.TryRemove(name, out _); } /// /// 将Model移除,并取得这个Model /// /// Model的Key /// Model对象 /// 被移除的Model internal bool Remove(string name, ref BaseModel? t) { return Models.TryRemove(name, out t); } /// /// 将Model移除,并取得这个Model /// /// Model的Key /// 被移除的Model internal BaseModel? RemoveAndGet(string name) { Models.TryRemove(name, out BaseModel? result); return result; } internal bool ContainsKey(string name) { return Models.ContainsKey(name); } /// /// 清空Model管理器 /// internal void Clear() { Models.Clear(); } /// /// 获取Model对象的列表 /// internal List GetList() { return Models.Values.ToList(); } } }