mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-12-05 00:06:02 +00:00
优化AsyncAwaiter和SocketHandler
This commit is contained in:
parent
3614747433
commit
4664bfbc29
@ -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();
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
namespace Milimoe.FunGame.Core.Library.Common.Architecture
|
||||
{
|
||||
public abstract class BaseController
|
||||
public abstract class BaseSocketHandlerController
|
||||
{
|
||||
/// <summary>
|
||||
/// 重写此方法并调用Model的Dispose方法,否则将无法正常将监听Socket的事件移除!
|
||||
@ -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)
|
||||
{
|
||||
Loading…
x
Reference in New Issue
Block a user