using System.Collections.Concurrent;
using Milimoe.FunGame.Core.Interface.Base;
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 IServerModel this[string name] => Models[name];
///
/// 向Model管理器中添加Model
///
/// Model的Key
/// Model对象
/// True:操作成功
internal bool Add(string name, IServerModel 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 IServerModel? t)
{
return Models.TryRemove(name, out t);
}
///
/// 将Model移除,并取得这个Model
///
/// Model的Key
/// 被移除的Model
internal IServerModel? RemoveAndGet(string name)
{
Models.TryRemove(name, out IServerModel? 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();
}
}
}