From 4664bfbc29c73e073c28488913b16a616e4f3f49 Mon Sep 17 00:00:00 2001 From: milimoe Date: Thu, 13 Jul 2023 01:03:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96AsyncAwaiter=E5=92=8CSocketHa?= =?UTF-8?q?ndler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Api/Transmittal/DataRequest.cs | 4 +-- .../{AsyncWorker.cs => AsyncAwaiter.cs} | 27 ++++++++++++++----- ...ller.cs => BaseSocketHandlerController.cs} | 2 +- ...BaseModel.cs => BaseSocketHandlerModel.cs} | 4 +-- 4 files changed, 25 insertions(+), 12 deletions(-) rename Library/Common/Architecture/{AsyncWorker.cs => AsyncAwaiter.cs} (54%) rename Library/Common/Architecture/{BaseController.cs => BaseSocketHandlerController.cs} (83%) rename Library/Common/Architecture/{BaseModel.cs => BaseSocketHandlerModel.cs} (93%) diff --git a/Api/Transmittal/DataRequest.cs b/Api/Transmittal/DataRequest.cs index eb376ee..57024d3 100644 --- a/Api/Transmittal/DataRequest.cs +++ b/Api/Transmittal/DataRequest.cs @@ -90,7 +90,7 @@ namespace Milimoe.FunGame.Core.Api.Transmittal return GetHashtableJsonObject(Worker.ResultData, key); } - private class Request : BaseModel + private class Request : BaseSocketHandlerModel { public Hashtable RequestData { get; } = new(); public Hashtable ResultData => _ResultData; @@ -130,7 +130,7 @@ namespace Milimoe.FunGame.Core.Api.Transmittal SetWorking(); if (Socket?.Send(SocketMessageType.DataRequest, RequestType, RequestData) == SocketResult.Success) { - await Task.Factory.StartNew(WaitForWorkDone); + await WaitForWorkDoneAsync(); } else throw new ConnectFailedException(); } diff --git a/Library/Common/Architecture/AsyncWorker.cs b/Library/Common/Architecture/AsyncAwaiter.cs similarity index 54% rename from Library/Common/Architecture/AsyncWorker.cs rename to Library/Common/Architecture/AsyncAwaiter.cs index f82d816..4859829 100644 --- a/Library/Common/Architecture/AsyncWorker.cs +++ b/Library/Common/Architecture/AsyncAwaiter.cs @@ -1,12 +1,10 @@ -using Milimoe.FunGame.Core.Library.Common.Network; - -namespace Milimoe.FunGame.Core.Library.Common.Architecture +namespace Milimoe.FunGame.Core.Library.Common.Architecture { /// - /// 继承这个类可以获得后台等待的功能 - /// 参考实现 + /// 继承这个类可以获得异步等待的功能 + /// 参考实现 /// - public abstract class AsyncWorker + public abstract class AsyncAwaiter { /// /// 接收到的实例 @@ -28,7 +26,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Architecture } /// - /// 请等待任务完成 + /// 等待任务完成(需要自己异步) /// protected virtual void WaitForWorkDone() { @@ -38,5 +36,20 @@ namespace Milimoe.FunGame.Core.Library.Common.Architecture Thread.Sleep(100); } } + + /// + /// 异步等待任务完成 + /// + protected async virtual Task WaitForWorkDoneAsync() + { + await Task.Factory.StartNew(() => + { + while (true) + { + if (!Working) break; + Thread.Sleep(100); + } + }); + } } } diff --git a/Library/Common/Architecture/BaseController.cs b/Library/Common/Architecture/BaseSocketHandlerController.cs similarity index 83% rename from Library/Common/Architecture/BaseController.cs rename to Library/Common/Architecture/BaseSocketHandlerController.cs index 10fe112..e1247a0 100644 --- a/Library/Common/Architecture/BaseController.cs +++ b/Library/Common/Architecture/BaseSocketHandlerController.cs @@ -1,6 +1,6 @@ namespace Milimoe.FunGame.Core.Library.Common.Architecture { - public abstract class BaseController + public abstract class BaseSocketHandlerController { /// /// 重写此方法并调用Model的Dispose方法,否则将无法正常将监听Socket的事件移除! diff --git a/Library/Common/Architecture/BaseModel.cs b/Library/Common/Architecture/BaseSocketHandlerModel.cs similarity index 93% rename from Library/Common/Architecture/BaseModel.cs rename to Library/Common/Architecture/BaseSocketHandlerModel.cs index e1b303d..da746e2 100644 --- a/Library/Common/Architecture/BaseModel.cs +++ b/Library/Common/Architecture/BaseSocketHandlerModel.cs @@ -10,7 +10,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Architecture /// 2、调用Socket.Send() == Success后,请等待任务完成:WaitForWorkDone(); /// 3、在其他任何地方修改Working状态,均会使任务终止。 /// - public class BaseModel : AsyncWorker, ISocketHandler, IDisposable + public class BaseSocketHandlerModel : AsyncAwaiter, ISocketHandler, IDisposable { /// /// 接收到的SocketObject实例 @@ -26,7 +26,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Architecture /// 继承请调用base构造 /// /// Socket - public BaseModel(Socket? socket) + public BaseSocketHandlerModel(Socket? socket) { if (socket != null) {