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