优化AsyncAwaiter和SocketHandler

This commit is contained in:
milimoe 2023-07-13 01:03:58 +08:00
parent 3614747433
commit 4664bfbc29
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
4 changed files with 25 additions and 12 deletions

View File

@ -90,7 +90,7 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
return GetHashtableJsonObject<T>(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();
}

View File

@ -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
{
/// <summary>
/// 继承这个类可以获得后台等待的功能
/// <para>参考实现 <see cref="BaseModel"/></para>
/// 继承这个类可以获得异步等待的功能
/// <para>参考实现 <see cref="BaseSocketHandlerModel"/></para>
/// </summary>
public abstract class AsyncWorker<T>
public abstract class AsyncAwaiter<T>
{
/// <summary>
/// 接收到的实例
@ -28,7 +26,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Architecture
}
/// <summary>
/// 等待任务完成
/// 等待任务完成(需要自己异步)
/// </summary>
protected virtual void WaitForWorkDone()
{
@ -38,5 +36,20 @@ namespace Milimoe.FunGame.Core.Library.Common.Architecture
Thread.Sleep(100);
}
}
/// <summary>
/// 异步等待任务完成
/// </summary>
protected async virtual Task WaitForWorkDoneAsync()
{
await Task.Factory.StartNew(() =>
{
while (true)
{
if (!Working) break;
Thread.Sleep(100);
}
});
}
}
}

View File

@ -1,6 +1,6 @@
namespace Milimoe.FunGame.Core.Library.Common.Architecture
{
public abstract class BaseController
public abstract class BaseSocketHandlerController
{
/// <summary>
/// 重写此方法并调用Model的Dispose方法否则将无法正常将监听Socket的事件移除

View File

@ -10,7 +10,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Architecture
/// <para>2、调用Socket.Send() == Success后请等待任务完成WaitForWorkDone();</para>
/// <para>3、在其他任何地方修改Working状态均会使任务终止。</para>
/// </summary>
public class BaseModel : AsyncWorker<SocketObject>, ISocketHandler, IDisposable
public class BaseSocketHandlerModel : AsyncAwaiter<SocketObject>, ISocketHandler, IDisposable
{
/// <summary>
/// 接收到的SocketObject实例
@ -26,7 +26,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Architecture
/// 继承请调用base构造
/// </summary>
/// <param name="socket">Socket</param>
public BaseModel(Socket? socket)
public BaseSocketHandlerModel(Socket? socket)
{
if (socket != null)
{