From df8ea4a8ccfec57f2cacfce12b2eb6e787382c05 Mon Sep 17 00:00:00 2001 From: Mili Date: Sat, 25 Feb 2023 21:18:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0BaseServerModel=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9ThreadManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Common/Network/ServerSocket.cs | 3 +- FunGame.Core/Library/Constant/General.cs | 2 +- .../Library/Server/BaseServerModel.cs | 19 +++++++ FunGame.Core/Service/ThreadManager.cs | 57 ++++++++++--------- 4 files changed, 51 insertions(+), 30 deletions(-) create mode 100644 FunGame.Core/Library/Server/BaseServerModel.cs diff --git a/FunGame.Core/Library/Common/Network/ServerSocket.cs b/FunGame.Core/Library/Common/Network/ServerSocket.cs index 61d0de3..9aa828d 100644 --- a/FunGame.Core/Library/Common/Network/ServerSocket.cs +++ b/FunGame.Core/Library/Common/Network/ServerSocket.cs @@ -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); } diff --git a/FunGame.Core/Library/Constant/General.cs b/FunGame.Core/Library/Constant/General.cs index 4bcb87d..e21f7ad 100644 --- a/FunGame.Core/Library/Constant/General.cs +++ b/FunGame.Core/Library/Constant/General.cs @@ -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; } } diff --git a/FunGame.Core/Library/Server/BaseServerModel.cs b/FunGame.Core/Library/Server/BaseServerModel.cs new file mode 100644 index 0000000..8ed748f --- /dev/null +++ b/FunGame.Core/Library/Server/BaseServerModel.cs @@ -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(); + } +} diff --git a/FunGame.Core/Service/ThreadManager.cs b/FunGame.Core/Service/ThreadManager.cs index 4ae649a..d2f8d13 100644 --- a/FunGame.Core/Service/ThreadManager.cs +++ b/FunGame.Core/Service/ThreadManager.cs @@ -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 /// /// 最大接受的线程数量 /// - private int MaxTask { get; } + private int MaxThread { get; } /// /// 可参与高并发的字典,但添加效率较低 /// - private ConcurrentDictionary Threads { get; } = new(); + private ConcurrentDictionary Threads { get; } = new(); /// /// Init ThreadManager /// - /// MaxTask - internal ThreadManager(int MaxTask = 0) + /// MaxThread + 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; } } /// - /// 获取Task对象 + /// 获取Thread对象 /// - /// Task的Key - /// Task对象 - internal Task this[string name] + /// Thread的Key + /// Thread对象 + internal BaseModel this[string name] { get { @@ -42,21 +43,21 @@ namespace Milimoe.FunGame.Core.Service } /// - /// 向线程管理器中添加Task + /// 向线程管理器中添加Thread /// - /// Task的Key - /// Task对象 + /// Thread的Key + /// Thread对象 /// True:操作成功 - 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); } /// - /// 从线程管理器中移除Task + /// 从线程管理器中移除Thread /// - /// Task的Key + /// Thread的Key /// True:操作成功 internal bool Remove(string name) { @@ -64,24 +65,24 @@ namespace Milimoe.FunGame.Core.Service } /// - /// 将Task移除,并取得这个Task + /// 将Thread移除,并取得这个Thread /// - /// Task的Key - /// Task对象 - /// 被移除的Task - internal bool Remove(string name, ref Task? t) + /// Thread的Key + /// Thread对象 + /// 被移除的Thread + internal bool Remove(string name, ref BaseModel? t) { return Threads.TryRemove(name, out t); } /// - /// 将Task移除,并取得这个Task + /// 将Thread移除,并取得这个Thread /// - /// Task的Key - /// 被移除的Task - internal Task? RemoveAndGet(string name) + /// Thread的Key + /// 被移除的Thread + internal BaseModel? RemoveAndGet(string name) { - Threads.TryRemove(name, out Task? result); + Threads.TryRemove(name, out BaseModel? result); return result; }