添加BaseServerModel,修改ThreadManager

This commit is contained in:
Mili 2023-02-25 21:18:57 +08:00
parent 34379df886
commit df8ea4a8cc
4 changed files with 51 additions and 30 deletions

View File

@ -1,5 +1,6 @@
using Milimoe.FunGame.Core.Interface.Base;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Server;
using Milimoe.FunGame.Core.Service;
namespace Milimoe.FunGame.Core.Library.Common.Network
@ -61,7 +62,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
throw new SocketGetClientException();
}
public bool AddClient(string ClientName, Task t)
public bool AddClient(string ClientName, BaseModel t)
{
return PlayerThreads.Add(ClientName, t);
}

View File

@ -12,7 +12,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
// Const
public const int MaxRetryTimes = 20;
public const int MaxTask_1C2G = 10;
public const int MaxTask_General = 20;
public const int MaxThread_General = 20;
public const int MaxTask_4C4G = 40;
}
}

View File

@ -0,0 +1,19 @@
using Milimoe.FunGame.Core.Library.Common.Network;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Library.Server
{
public abstract class BaseModel
{
public bool Running = false;
public ClientSocket? Socket = null;
public Task? Task = null;
public string ClientName = "";
public abstract bool Read(ClientSocket socket);
public abstract bool Send(ClientSocket socket, SocketMessageType type, params object[] objs);
public abstract void Start();
}
}

View File

@ -1,4 +1,5 @@
using System.Collections.Concurrent;
using Milimoe.FunGame.Core.Library.Server;
namespace Milimoe.FunGame.Core.Service
{
@ -7,33 +8,33 @@ namespace Milimoe.FunGame.Core.Service
/// <summary>
/// 最大接受的线程数量
/// </summary>
private int MaxTask { get; }
private int MaxThread { get; }
/// <summary>
/// 可参与高并发的字典,但添加效率较低
/// </summary>
private ConcurrentDictionary<string, Task> Threads { get; } = new();
private ConcurrentDictionary<string, BaseModel> Threads { get; } = new();
/// <summary>
/// Init ThreadManager
/// </summary>
/// <param name="MaxTask">MaxTask</param>
internal ThreadManager(int MaxTask = 0)
/// <param name="MaxThread">MaxThread</param>
internal ThreadManager(int MaxThread = 0)
{
if (MaxTask <= 0)
this.MaxTask = Library.Constant.General.MaxTask_General;
if (MaxThread <= 0)
this.MaxThread = Library.Constant.General.MaxThread_General;
else
{
this.MaxTask = MaxTask;
this.MaxThread = MaxThread;
}
}
/// <summary>
/// 获取Task对象
/// 获取Thread对象
/// </summary>
/// <param name="name">Task的Key</param>
/// <returns>Task对象</returns>
internal Task this[string name]
/// <param name="name">Thread的Key</param>
/// <returns>Thread对象</returns>
internal BaseModel this[string name]
{
get
{
@ -42,21 +43,21 @@ namespace Milimoe.FunGame.Core.Service
}
/// <summary>
/// 向线程管理器中添加Task
/// 向线程管理器中添加Thread
/// </summary>
/// <param name="name">Task的Key</param>
/// <param name="t">Task对象</param>
/// <param name="name">Thread的Key</param>
/// <param name="t">Thread对象</param>
/// <returns>True操作成功</returns>
internal bool Add(string name, Task t)
internal bool Add(string name, BaseModel t)
{
if (Threads.Count + 1 > MaxTask) return false;
if (Threads.Count + 1 > MaxThread) return false;
return Threads.TryAdd(name, t);
}
/// <summary>
/// 从线程管理器中移除Task
/// 从线程管理器中移除Thread
/// </summary>
/// <param name="name">Task的Key</param>
/// <param name="name">Thread的Key</param>
/// <returns>True操作成功</returns>
internal bool Remove(string name)
{
@ -64,24 +65,24 @@ namespace Milimoe.FunGame.Core.Service
}
/// <summary>
/// 将Task移除并取得这个Task
/// 将Thread移除并取得这个Thread
/// </summary>
/// <param name="name">Task的Key</param>
/// <param name="t">Task对象</param>
/// <returns>被移除的Task</returns>
internal bool Remove(string name, ref Task? t)
/// <param name="name">Thread的Key</param>
/// <param name="t">Thread对象</param>
/// <returns>被移除的Thread</returns>
internal bool Remove(string name, ref BaseModel? t)
{
return Threads.TryRemove(name, out t);
}
/// <summary>
/// 将Task移除并取得这个Task
/// 将Thread移除并取得这个Thread
/// </summary>
/// <param name="name">Task的Key</param>
/// <returns>被移除的Task</returns>
internal Task? RemoveAndGet(string name)
/// <param name="name">Thread的Key</param>
/// <returns>被移除的Thread</returns>
internal BaseModel? RemoveAndGet(string name)
{
Threads.TryRemove(name, out Task? result);
Threads.TryRemove(name, out BaseModel? result);
return result;
}