From 9c0f742f0086670f9911112cec6b4b27d95565cd Mon Sep 17 00:00:00 2001
From: milimoe <110188673+milimoe@users.noreply.github.com>
Date: Tue, 18 Jul 2023 00:14:01 +0800
Subject: [PATCH] =?UTF-8?q?DataRequest=EF=BC=9A=E6=B7=BB=E5=8A=A0=E9=95=BF?=
=?UTF-8?q?=E8=BF=90=E8=A1=8C=E6=A8=A1=E5=BC=8F=E5=92=8C=E5=85=B3=E9=97=AD?=
=?UTF-8?q?=E4=BA=8B=E4=BB=B6=20(#41)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* DataRequest:添加长运行模式和关闭事件
* Update SocketHandlerController.cs
---------
Co-authored-by: Yezi <53083103+yeziuku@users.noreply.github.com>
---
Api/Transmittal/DataRequest.cs | 25 ++++++++++++++++++-------
Controller/RunTimeController.cs | 16 ++++++++++++++++
Controller/SocketHandlerController.cs | 25 ++++++++++++++++++++++++-
3 files changed, 58 insertions(+), 8 deletions(-)
diff --git a/Api/Transmittal/DataRequest.cs b/Api/Transmittal/DataRequest.cs
index 7878b22..7decd8a 100644
--- a/Api/Transmittal/DataRequest.cs
+++ b/Api/Transmittal/DataRequest.cs
@@ -53,9 +53,10 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
///
///
///
- internal DataRequest(Socket Socket, DataRequestType RequestType)
+ ///
+ internal DataRequest(Socket Socket, DataRequestType RequestType, bool IsLongRunning = false)
{
- Worker = new(Socket, RequestType);
+ Worker = new(Socket, RequestType, IsLongRunning);
}
///
@@ -69,6 +70,14 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
else Worker.RequestData.Add(key, value);
}
+ ///
+ /// 长时间运行的数据请求需要在使用完毕后自行关闭
+ ///
+ public void Dispose()
+ {
+ Worker.Dispose();
+ }
+
///
/// 向服务器发送数据请求
///
@@ -109,10 +118,11 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
private readonly Socket? Socket;
private readonly DataRequestType RequestType;
+ private readonly bool _IsLongRunning;
+ private Hashtable _ResultData = new();
private RequestResult _Result = RequestResult.Missing;
private string _Error = "";
- private Hashtable _ResultData = new();
public void SendRequest()
{
@@ -152,10 +162,11 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
}
}
- public Request(Socket? socket, DataRequestType requestType) : base(socket)
+ public Request(Socket? Socket, DataRequestType RequestType, bool IsLongRunning = false) : base(Socket)
{
- Socket = socket;
- RequestType = requestType;
+ this.Socket = Socket;
+ this.RequestType = RequestType;
+ _IsLongRunning = IsLongRunning;
}
public override void SocketHandler(SocketObject SocketObject)
@@ -169,7 +180,7 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
DataRequestType type = SocketObject.GetParam(0);
if (type == RequestType)
{
- Dispose();
+ if (!_IsLongRunning) Dispose();
_ResultData = SocketObject.GetParam(1) ?? new();
_Result = RequestResult.Success;
}
diff --git a/Controller/RunTimeController.cs b/Controller/RunTimeController.cs
index b7c5e1c..aced6e7 100644
--- a/Controller/RunTimeController.cs
+++ b/Controller/RunTimeController.cs
@@ -151,6 +151,22 @@ namespace Milimoe.FunGame.Core.Controller
}
throw new ConnectFailedException();
}
+
+ ///
+ /// 基于本地已连接的Socket创建长时间运行的数据请求
+ ///
+ ///
+ ///
+ ///
+ public DataRequest NewLongRunningDataRequest(DataRequestType RequestType)
+ {
+ if (_Socket != null)
+ {
+ DataRequest request = new(_Socket, RequestType, true);
+ return request;
+ }
+ throw new ConnectFailedException();
+ }
///
/// 开始接收服务器信息
diff --git a/Controller/SocketHandlerController.cs b/Controller/SocketHandlerController.cs
index ff3d26d..d9b4de7 100644
--- a/Controller/SocketHandlerController.cs
+++ b/Controller/SocketHandlerController.cs
@@ -56,6 +56,7 @@ namespace Milimoe.FunGame.Core.Controller
///
public void Dispose()
{
+ OnDisposed();
Dispose(true);
GC.SuppressFinalize(this);
}
@@ -75,5 +76,27 @@ namespace Milimoe.FunGame.Core.Controller
}
IsDisposed = true;
}
+
+ ///
+ /// 关闭事件
+ ///
+ /// SocketObject
+ protected delegate void DisposedEvent();
+
+ ///
+ /// Controller关闭时事件
+ /// 不建议new Dispose()方法,建议使用事件
+ /// 事件会在base.Dispose()执行前触发
+ ///
+ protected static event DisposedEvent? Disposed;
+
+ ///
+ /// 触发关闭事件
+ ///
+ /// SocketObject
+ protected static void OnDisposed()
+ {
+ Disposed?.Invoke();
+ }
}
-}
\ No newline at end of file
+}