#80:为Addon添加了专用的DataRequest方法 (#84)

This commit is contained in:
milimoe 2024-08-08 12:18:20 +08:00 committed by GitHub
parent b53d95525a
commit 924a45413a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 152 additions and 46 deletions

View File

@ -54,53 +54,59 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
/// <summary> /// <summary>
/// 基于本地已连接的 <see cref="Socket"/> 创建新的数据请求<para/> /// 基于本地已连接的 <see cref="Socket"/> 创建新的数据请求<para/>
/// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequest(DataRequestType)"/> 创建一个新的请求 /// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequest(DataRequestType)"/> 创建一个新的请求
/// 插件则使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequestForAddon(DataRequestType)"/> 创建一个新的请求<para/>
/// </summary> /// </summary>
/// <param name="Socket"></param> /// <param name="Socket"></param>
/// <param name="RequestType"></param> /// <param name="RequestType"></param>
/// <param name="IsLongRunning"></param> /// <param name="IsLongRunning"></param>
internal DataRequest(Socket Socket, DataRequestType RequestType, bool IsLongRunning = false) /// <param name="RuntimeType"></param>
internal DataRequest(Socket Socket, DataRequestType RequestType, bool IsLongRunning = false, SocketRuntimeType RuntimeType = SocketRuntimeType.Client)
{ {
Worker = new(Socket, RequestType, Guid.NewGuid(), IsLongRunning); Worker = new(Socket, RequestType, Guid.NewGuid(), IsLongRunning, RuntimeType);
} }
/// <summary> /// <summary>
/// 基于本地已连接的 <see cref="HTTPClient"/> 创建新的数据请求<para/> /// 基于本地已连接的 <see cref="HTTPClient"/> 创建新的数据请求<para/>
/// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequest(DataRequestType)"/> 创建一个新的请求<para/> /// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequest(DataRequestType)"/> 创建一个新的请求<para/>
/// 插件则使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequestForAddon(DataRequestType)"/> 创建一个新的请求<para/>
/// 此数据请求只能调用异步方法 <see cref="SendRequestAsync"/> 请求数据 /// 此数据请求只能调用异步方法 <see cref="SendRequestAsync"/> 请求数据
/// </summary> /// </summary>
/// <param name="WebSocket"></param> /// <param name="WebSocket"></param>
/// <param name="RequestType"></param> /// <param name="RequestType"></param>
/// <param name="IsLongRunning"></param> /// <param name="IsLongRunning"></param>
internal DataRequest(HTTPClient WebSocket, DataRequestType RequestType, bool IsLongRunning = false) /// <param name="RuntimeType"></param>
internal DataRequest(HTTPClient WebSocket, DataRequestType RequestType, bool IsLongRunning = false, SocketRuntimeType RuntimeType = SocketRuntimeType.Client)
{ {
Worker = new(WebSocket, RequestType, Guid.NewGuid(), IsLongRunning); Worker = new(WebSocket, RequestType, Guid.NewGuid(), IsLongRunning, RuntimeType);
} }
/// <summary> /// <summary>
/// 基于本地已连接的 <see cref="Socket"/> 创建新的局内(<see cref="Model.Gaming"/>)数据请求<para/> /// 基于本地已连接的 <see cref="Socket"/> 创建新的局内(<see cref="Model.Gaming"/>)数据请求<para/>
/// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequest(GamingType)"/> 创建一个新的请求<para/> /// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequestForAddon(GamingType)"/> 创建一个新的请求<para/>
/// 此构造方法是给 <see cref="Library.Common.Addon.GameModule"/> 提供的 /// 此构造方法是给 <see cref="Library.Common.Addon.GameModule"/> 提供的
/// </summary> /// </summary>
/// <param name="Socket"></param> /// <param name="Socket"></param>
/// <param name="GamingType"></param> /// <param name="GamingType"></param>
/// <param name="IsLongRunning"></param> /// <param name="IsLongRunning"></param>
internal DataRequest(Socket Socket, GamingType GamingType, bool IsLongRunning = false) /// <param name="RuntimeType"></param>
internal DataRequest(Socket Socket, GamingType GamingType, bool IsLongRunning = false, SocketRuntimeType RuntimeType = SocketRuntimeType.Client)
{ {
GamingWorker = new(Socket, GamingType, Guid.NewGuid(), IsLongRunning); GamingWorker = new(Socket, GamingType, Guid.NewGuid(), IsLongRunning, RuntimeType);
} }
/// <summary> /// <summary>
/// 基于本地已连接的 <see cref="HTTPClient"/> 创建新的局内(<see cref="Model.Gaming"/>)数据请求<para/> /// 基于本地已连接的 <see cref="HTTPClient"/> 创建新的局内(<see cref="Model.Gaming"/>)数据请求<para/>
/// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequest(GamingType)"/> 创建一个新的请求<para/> /// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequestForAddon(GamingType)"/> 创建一个新的请求<para/>
/// 此构造方法是给 <see cref="Library.Common.Addon.GameModule"/> 提供的<para/> /// 此构造方法是给 <see cref="Library.Common.Addon.GameModule"/> 提供的<para/>
/// 此数据请求只能调用异步方法 <see cref="SendRequestAsync"/> 请求数据 /// 此数据请求只能调用异步方法 <see cref="SendRequestAsync"/> 请求数据
/// </summary> /// </summary>
/// <param name="WebSocket"></param> /// <param name="WebSocket"></param>
/// <param name="GamingType"></param> /// <param name="GamingType"></param>
/// <param name="IsLongRunning"></param> /// <param name="IsLongRunning"></param>
internal DataRequest(HTTPClient WebSocket, GamingType GamingType, bool IsLongRunning = false) /// <param name="RuntimeType"></param>
internal DataRequest(HTTPClient WebSocket, GamingType GamingType, bool IsLongRunning = false, SocketRuntimeType RuntimeType = SocketRuntimeType.Client)
{ {
GamingWorker = new(WebSocket, GamingType, Guid.NewGuid(), IsLongRunning); GamingWorker = new(WebSocket, GamingType, Guid.NewGuid(), IsLongRunning, RuntimeType);
} }
/// <summary> /// <summary>
@ -195,24 +201,27 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
private readonly DataRequestType RequestType = DataRequestType.UnKnown; private readonly DataRequestType RequestType = DataRequestType.UnKnown;
private readonly Guid RequestID = Guid.Empty; private readonly Guid RequestID = Guid.Empty;
private readonly bool IsLongRunning = false; private readonly bool IsLongRunning = false;
private readonly SocketRuntimeType RuntimeType = SocketRuntimeType.Client;
private Hashtable _ResultData = []; private Hashtable _ResultData = [];
private RequestResult _Result = RequestResult.Missing; private RequestResult _Result = RequestResult.Missing;
private string _Error = ""; private string _Error = "";
public SocketRequest(Socket? Socket, DataRequestType RequestType, Guid RequestID, bool IsLongRunning = false) : base(Socket) public SocketRequest(Socket? Socket, DataRequestType RequestType, Guid RequestID, bool IsLongRunning = false, SocketRuntimeType RuntimeType = SocketRuntimeType.Client) : base(Socket)
{ {
this.Socket = Socket; this.Socket = Socket;
this.RequestType = RequestType; this.RequestType = RequestType;
this.RequestID = RequestID; this.RequestID = RequestID;
this.IsLongRunning = IsLongRunning; this.IsLongRunning = IsLongRunning;
this.RuntimeType = RuntimeType;
} }
public SocketRequest(HTTPClient? WebSocket, DataRequestType RequestType, Guid RequestID, bool IsLongRunning = false) : base(WebSocket) public SocketRequest(HTTPClient? WebSocket, DataRequestType RequestType, Guid RequestID, bool IsLongRunning = false, SocketRuntimeType RuntimeType = SocketRuntimeType.Client) : base(WebSocket)
{ {
this.WebSocket = WebSocket; this.WebSocket = WebSocket;
this.RequestType = RequestType; this.RequestType = RequestType;
this.RequestID = RequestID; this.RequestID = RequestID;
this.IsLongRunning = IsLongRunning; this.IsLongRunning = IsLongRunning;
this.RuntimeType = RuntimeType;
} }
public void SendRequest() public void SendRequest()
@ -220,6 +229,12 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
try try
{ {
SetWorking(); SetWorking();
if (RuntimeType == SocketRuntimeType.Addon || RuntimeType == SocketRuntimeType.Addon)
{
if (RequestData.ContainsKey(SocketSet.Plugins_Mark)) RequestData[SocketSet.Plugins_Mark] = "true";
else RequestData.Add(SocketSet.Plugins_Mark, true);
}
else RequestData.Remove(SocketSet.Plugins_Mark);
if (Socket != null && Socket.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData) == SocketResult.Success) if (Socket != null && Socket.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData) == SocketResult.Success)
{ {
WaitForWorkDone(); WaitForWorkDone();
@ -243,6 +258,12 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
try try
{ {
SetWorking(); SetWorking();
if (RuntimeType == SocketRuntimeType.Addon || RuntimeType == SocketRuntimeType.Addon)
{
if (RequestData.ContainsKey(SocketSet.Plugins_Mark)) RequestData[SocketSet.Plugins_Mark] = "true";
else RequestData.Add(SocketSet.Plugins_Mark, true);
}
else RequestData.Remove(SocketSet.Plugins_Mark);
if (Socket != null && Socket.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData) == SocketResult.Success) if (Socket != null && Socket.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData) == SocketResult.Success)
{ {
await WaitForWorkDoneAsync(); await WaitForWorkDoneAsync();
@ -303,24 +324,27 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
private readonly GamingType GamingType = GamingType.None; private readonly GamingType GamingType = GamingType.None;
private readonly Guid RequestID = Guid.Empty; private readonly Guid RequestID = Guid.Empty;
private readonly bool IsLongRunning = false; private readonly bool IsLongRunning = false;
private readonly SocketRuntimeType RuntimeType = SocketRuntimeType.Client;
private Hashtable _ResultData = []; private Hashtable _ResultData = [];
private RequestResult _Result = RequestResult.Missing; private RequestResult _Result = RequestResult.Missing;
private string _Error = ""; private string _Error = "";
public GamingRequest(Socket? Socket, GamingType GamingType, Guid RequestID, bool IsLongRunning = false) : base(Socket) public GamingRequest(Socket? Socket, GamingType GamingType, Guid RequestID, bool IsLongRunning = false, SocketRuntimeType RuntimeType = SocketRuntimeType.Client) : base(Socket)
{ {
this.Socket = Socket; this.Socket = Socket;
this.GamingType = GamingType; this.GamingType = GamingType;
this.RequestID = RequestID; this.RequestID = RequestID;
this.IsLongRunning = IsLongRunning; this.IsLongRunning = IsLongRunning;
this.RuntimeType = RuntimeType;
} }
public GamingRequest(HTTPClient? WebSocket, GamingType GamingType, Guid RequestID, bool IsLongRunning = false) : base(WebSocket) public GamingRequest(HTTPClient? WebSocket, GamingType GamingType, Guid RequestID, bool IsLongRunning = false, SocketRuntimeType RuntimeType = SocketRuntimeType.Client) : base(WebSocket)
{ {
this.WebSocket = WebSocket; this.WebSocket = WebSocket;
this.GamingType = GamingType; this.GamingType = GamingType;
this.RequestID = RequestID; this.RequestID = RequestID;
this.IsLongRunning = IsLongRunning; this.IsLongRunning = IsLongRunning;
this.RuntimeType = RuntimeType;
} }
public void SendRequest() public void SendRequest()
@ -328,6 +352,12 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
try try
{ {
SetWorking(); SetWorking();
if (RuntimeType == SocketRuntimeType.Addon || RuntimeType == SocketRuntimeType.Addon)
{
if (RequestData.ContainsKey(SocketSet.Plugins_Mark)) RequestData[SocketSet.Plugins_Mark] = "true";
else RequestData.Add(SocketSet.Plugins_Mark, true);
}
else RequestData.Remove(SocketSet.Plugins_Mark);
if (Socket != null && Socket.Send(SocketMessageType.DataRequest, GamingType, RequestID, RequestData) == SocketResult.Success) if (Socket != null && Socket.Send(SocketMessageType.DataRequest, GamingType, RequestID, RequestData) == SocketResult.Success)
{ {
WaitForWorkDone(); WaitForWorkDone();
@ -351,6 +381,12 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
try try
{ {
SetWorking(); SetWorking();
if (RuntimeType == SocketRuntimeType.Addon || RuntimeType == SocketRuntimeType.Addon)
{
if (RequestData.ContainsKey(SocketSet.Plugins_Mark)) RequestData[SocketSet.Plugins_Mark] = "true";
else RequestData.Add(SocketSet.Plugins_Mark, true);
}
else RequestData.Remove(SocketSet.Plugins_Mark);
if (Socket != null && Socket.Send(SocketMessageType.DataRequest, GamingType, RequestID, RequestData) == SocketResult.Success) if (Socket != null && Socket.Send(SocketMessageType.DataRequest, GamingType, RequestID, RequestData) == SocketResult.Success)
{ {
await WaitForWorkDoneAsync(); await WaitForWorkDoneAsync();

View File

@ -286,18 +286,52 @@ namespace Milimoe.FunGame.Core.Controller
throw new ConnectFailedException(); throw new ConnectFailedException();
} }
/// <summary>
/// 基于本地已连接的Socket创建新的数据请求<para/>
/// 加载项专用(<see cref="Library.Common.Addon.Plugin"/> / <see cref="Library.Common.Addon.GameModule"/>
/// </summary>
/// <param name="RequestType"></param>
/// <returns></returns>
/// <exception cref="ConnectFailedException"></exception>
public DataRequest NewDataRequestForAddon(DataRequestType RequestType)
{
if (_Socket != null)
{
DataRequest request = new(_Socket, RequestType, false, SocketRuntimeType.Addon);
return request;
}
throw new ConnectFailedException();
}
/// <summary>
/// 基于本地已连接的Socket创建长时间运行的数据请求
/// 加载项专用(<see cref="Library.Common.Addon.Plugin"/> / <see cref="Library.Common.Addon.GameModule"/>
/// </summary>
/// <param name="RequestType"></param>
/// <returns></returns>
/// <exception cref="ConnectFailedException"></exception>
public DataRequest NewLongRunningDataRequestForAddon(DataRequestType RequestType)
{
if (_Socket != null)
{
DataRequest request = new(_Socket, RequestType, true, SocketRuntimeType.Addon);
return request;
}
throw new ConnectFailedException();
}
/// <summary> /// <summary>
/// 基于本地已连接的Socket创建新的局内<see cref="Model.Gaming"/>)数据请求<para/> /// 基于本地已连接的Socket创建新的局内<see cref="Model.Gaming"/>)数据请求<para/>
/// 此方法是给 <see cref="Library.Common.Addon.GameModule"/> 提供的 /// 加载项专用:此方法是给 <see cref="Library.Common.Addon.GameModule"/> 提供的
/// </summary> /// </summary>
/// <param name="GamingType"></param> /// <param name="GamingType"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="ConnectFailedException"></exception> /// <exception cref="ConnectFailedException"></exception>
public DataRequest NewDataRequest(GamingType GamingType) public DataRequest NewDataRequestForAddon(GamingType GamingType)
{ {
if (_Socket != null) if (_Socket != null)
{ {
DataRequest request = new(_Socket, GamingType); DataRequest request = new(_Socket, GamingType, false, SocketRuntimeType.Addon);
return request; return request;
} }
throw new ConnectFailedException(); throw new ConnectFailedException();
@ -305,16 +339,16 @@ namespace Milimoe.FunGame.Core.Controller
/// <summary> /// <summary>
/// 基于本地已连接的Socket创建长时间运行的局内<see cref="Model.Gaming"/>)数据请求<para/> /// 基于本地已连接的Socket创建长时间运行的局内<see cref="Model.Gaming"/>)数据请求<para/>
/// 此方法是给 <see cref="Library.Common.Addon.GameModule"/> 提供的 /// 加载项专用:此方法是给 <see cref="Library.Common.Addon.GameModule"/> 提供的
/// </summary> /// </summary>
/// <param name="GamingType"></param> /// <param name="GamingType"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="ConnectFailedException"></exception> /// <exception cref="ConnectFailedException"></exception>
public DataRequest NewLongRunningDataRequest(GamingType GamingType) public DataRequest NewLongRunningDataRequestForAddon(GamingType GamingType)
{ {
if (_Socket != null) if (_Socket != null)
{ {
DataRequest request = new(_Socket, GamingType, true); DataRequest request = new(_Socket, GamingType, true, SocketRuntimeType.Addon);
return request; return request;
} }
throw new ConnectFailedException(); throw new ConnectFailedException();

View File

@ -31,45 +31,51 @@
私有的实现类(这是局内请求的) 私有的实现类(这是局内请求的)
</summary> </summary>
</member> </member>
<member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.#ctor(Milimoe.FunGame.Core.Library.Common.Network.Socket,Milimoe.FunGame.Core.Library.Constant.DataRequestType,System.Boolean)"> <member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.#ctor(Milimoe.FunGame.Core.Library.Common.Network.Socket,Milimoe.FunGame.Core.Library.Constant.DataRequestType,System.Boolean,Milimoe.FunGame.Core.Library.Constant.SocketRuntimeType)">
<summary> <summary>
基于本地已连接的 <see cref="T:Milimoe.FunGame.Core.Library.Common.Network.Socket"/> 创建新的数据请求<para/> 基于本地已连接的 <see cref="T:Milimoe.FunGame.Core.Library.Common.Network.Socket"/> 创建新的数据请求<para/>
使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequest(Milimoe.FunGame.Core.Library.Constant.DataRequestType)"/> 创建一个新的请求 使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequest(Milimoe.FunGame.Core.Library.Constant.DataRequestType)"/> 创建一个新的请求
插件则使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.DataRequestType)"/> 创建一个新的请求<para/>
</summary> </summary>
<param name="Socket"></param> <param name="Socket"></param>
<param name="RequestType"></param> <param name="RequestType"></param>
<param name="IsLongRunning"></param> <param name="IsLongRunning"></param>
<param name="RuntimeType"></param>
</member> </member>
<member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.#ctor(Milimoe.FunGame.Core.Library.Common.Network.HTTPClient,Milimoe.FunGame.Core.Library.Constant.DataRequestType,System.Boolean)"> <member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.#ctor(Milimoe.FunGame.Core.Library.Common.Network.HTTPClient,Milimoe.FunGame.Core.Library.Constant.DataRequestType,System.Boolean,Milimoe.FunGame.Core.Library.Constant.SocketRuntimeType)">
<summary> <summary>
基于本地已连接的 <see cref="T:Milimoe.FunGame.Core.Library.Common.Network.HTTPClient"/> 创建新的数据请求<para/> 基于本地已连接的 <see cref="T:Milimoe.FunGame.Core.Library.Common.Network.HTTPClient"/> 创建新的数据请求<para/>
使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequest(Milimoe.FunGame.Core.Library.Constant.DataRequestType)"/> 创建一个新的请求<para/> 使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequest(Milimoe.FunGame.Core.Library.Constant.DataRequestType)"/> 创建一个新的请求<para/>
插件则使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.DataRequestType)"/> 创建一个新的请求<para/>
此数据请求只能调用异步方法 <see cref="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.SendRequestAsync"/> 请求数据 此数据请求只能调用异步方法 <see cref="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.SendRequestAsync"/> 请求数据
</summary> </summary>
<param name="WebSocket"></param> <param name="WebSocket"></param>
<param name="RequestType"></param> <param name="RequestType"></param>
<param name="IsLongRunning"></param> <param name="IsLongRunning"></param>
<param name="RuntimeType"></param>
</member> </member>
<member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.#ctor(Milimoe.FunGame.Core.Library.Common.Network.Socket,Milimoe.FunGame.Core.Library.Constant.GamingType,System.Boolean)"> <member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.#ctor(Milimoe.FunGame.Core.Library.Common.Network.Socket,Milimoe.FunGame.Core.Library.Constant.GamingType,System.Boolean,Milimoe.FunGame.Core.Library.Constant.SocketRuntimeType)">
<summary> <summary>
基于本地已连接的 <see cref="T:Milimoe.FunGame.Core.Library.Common.Network.Socket"/> 创建新的局内(<see cref="T:Milimoe.FunGame.Core.Model.Gaming"/>)数据请求<para/> 基于本地已连接的 <see cref="T:Milimoe.FunGame.Core.Library.Common.Network.Socket"/> 创建新的局内(<see cref="T:Milimoe.FunGame.Core.Model.Gaming"/>)数据请求<para/>
使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequest(Milimoe.FunGame.Core.Library.Constant.GamingType)"/> 创建一个新的请求<para/> 使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.GamingType)"/> 创建一个新的请求<para/>
此构造方法是给 <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/> 提供的 此构造方法是给 <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/> 提供的
</summary> </summary>
<param name="Socket"></param> <param name="Socket"></param>
<param name="GamingType"></param> <param name="GamingType"></param>
<param name="IsLongRunning"></param> <param name="IsLongRunning"></param>
<param name="RuntimeType"></param>
</member> </member>
<member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.#ctor(Milimoe.FunGame.Core.Library.Common.Network.HTTPClient,Milimoe.FunGame.Core.Library.Constant.GamingType,System.Boolean)"> <member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.#ctor(Milimoe.FunGame.Core.Library.Common.Network.HTTPClient,Milimoe.FunGame.Core.Library.Constant.GamingType,System.Boolean,Milimoe.FunGame.Core.Library.Constant.SocketRuntimeType)">
<summary> <summary>
基于本地已连接的 <see cref="T:Milimoe.FunGame.Core.Library.Common.Network.HTTPClient"/> 创建新的局内(<see cref="T:Milimoe.FunGame.Core.Model.Gaming"/>)数据请求<para/> 基于本地已连接的 <see cref="T:Milimoe.FunGame.Core.Library.Common.Network.HTTPClient"/> 创建新的局内(<see cref="T:Milimoe.FunGame.Core.Model.Gaming"/>)数据请求<para/>
使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequest(Milimoe.FunGame.Core.Library.Constant.GamingType)"/> 创建一个新的请求<para/> 使用 <see cref="T:Milimoe.FunGame.Core.Controller.RunTimeController"/> 中的 <see cref="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.GamingType)"/> 创建一个新的请求<para/>
此构造方法是给 <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/> 提供的<para/> 此构造方法是给 <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/> 提供的<para/>
此数据请求只能调用异步方法 <see cref="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.SendRequestAsync"/> 请求数据 此数据请求只能调用异步方法 <see cref="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.SendRequestAsync"/> 请求数据
</summary> </summary>
<param name="WebSocket"></param> <param name="WebSocket"></param>
<param name="GamingType"></param> <param name="GamingType"></param>
<param name="IsLongRunning"></param> <param name="IsLongRunning"></param>
<param name="RuntimeType"></param>
</member> </member>
<member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.AddRequestData(System.String,System.Object)"> <member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.AddRequestData(System.String,System.Object)">
<summary> <summary>
@ -1378,19 +1384,37 @@
<returns></returns> <returns></returns>
<exception cref="T:Milimoe.FunGame.ConnectFailedException"></exception> <exception cref="T:Milimoe.FunGame.ConnectFailedException"></exception>
</member> </member>
<member name="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequest(Milimoe.FunGame.Core.Library.Constant.GamingType)"> <member name="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.DataRequestType)">
<summary>
基于本地已连接的Socket创建新的数据请求<para/>
加载项专用(<see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.Plugin"/> / <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/>
</summary>
<param name="RequestType"></param>
<returns></returns>
<exception cref="T:Milimoe.FunGame.ConnectFailedException"></exception>
</member>
<member name="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewLongRunningDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.DataRequestType)">
<summary>
基于本地已连接的Socket创建长时间运行的数据请求
加载项专用(<see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.Plugin"/> / <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/>
</summary>
<param name="RequestType"></param>
<returns></returns>
<exception cref="T:Milimoe.FunGame.ConnectFailedException"></exception>
</member>
<member name="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.GamingType)">
<summary> <summary>
基于本地已连接的Socket创建新的局内<see cref="T:Milimoe.FunGame.Core.Model.Gaming"/>)数据请求<para/> 基于本地已连接的Socket创建新的局内<see cref="T:Milimoe.FunGame.Core.Model.Gaming"/>)数据请求<para/>
此方法是给 <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/> 提供的 加载项专用:此方法是给 <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/> 提供的
</summary> </summary>
<param name="GamingType"></param> <param name="GamingType"></param>
<returns></returns> <returns></returns>
<exception cref="T:Milimoe.FunGame.ConnectFailedException"></exception> <exception cref="T:Milimoe.FunGame.ConnectFailedException"></exception>
</member> </member>
<member name="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewLongRunningDataRequest(Milimoe.FunGame.Core.Library.Constant.GamingType)"> <member name="M:Milimoe.FunGame.Core.Controller.RunTimeController.NewLongRunningDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.GamingType)">
<summary> <summary>
基于本地已连接的Socket创建长时间运行的局内<see cref="T:Milimoe.FunGame.Core.Model.Gaming"/>)数据请求<para/> 基于本地已连接的Socket创建长时间运行的局内<see cref="T:Milimoe.FunGame.Core.Model.Gaming"/>)数据请求<para/>
此方法是给 <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/> 提供的 加载项专用:此方法是给 <see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.GameModule"/> 提供的
</summary> </summary>
<param name="GamingType"></param> <param name="GamingType"></param>
<returns></returns> <returns></returns>

View File

@ -31,8 +31,8 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
this.ServerPort = ServerPort; this.ServerPort = ServerPort;
if (MaxConnection <= 0) if (MaxConnection <= 0)
{ {
OnlineClients = new(); OnlineClients = [];
OnlineUsers = new(); OnlineUsers = [];
} }
else else
{ {

View File

@ -33,6 +33,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
public const int MaxConnection_1C2G = 10; public const int MaxConnection_1C2G = 10;
public const int MaxConnection_2C2G = 20; public const int MaxConnection_2C2G = 20;
public const int MaxConnection_4C4G = 40; public const int MaxConnection_4C4G = 40;
public const string Plugins_Mark = "plugins_mark";
public const string Socket = "Socket"; public const string Socket = "Socket";
public const string Unknown = "Unknown"; public const string Unknown = "Unknown";

View File

@ -144,8 +144,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
{ {
Client, Client,
Server, Server,
Client_Plugin, Addon
Server_Plugin
} }
public enum ErrorIPAddressType public enum ErrorIPAddressType

View File

@ -18,9 +18,9 @@ namespace Milimoe.FunGame.Core.Model
public int GetReadyPlayerCount(string roomid) => GetReadyPlayerList(roomid).Count; public int GetReadyPlayerCount(string roomid) => GetReadyPlayerList(roomid).Count;
public List<Room> ListRoom => _List.Values.ToList(); public List<Room> ListRoom => [.. _List.Values];
public List<string> ListRoomID => _List.Keys.ToList(); public List<string> ListRoomID => [.. _List.Keys];
public List<User> GetPlayerList(string roomid) => _PlayerList.TryGetValue(roomid, out List<User>? user) ? user : []; public List<User> GetPlayerList(string roomid) => _PlayerList.TryGetValue(roomid, out List<User>? user) ? user : [];
@ -112,7 +112,7 @@ namespace Milimoe.FunGame.Core.Model
} }
} }
public IEnumerator GetEnumerator() public IEnumerator<Room> GetEnumerator()
{ {
foreach (Room room in ListRoom) foreach (Room room in ListRoom)
{ {
@ -120,12 +120,9 @@ namespace Milimoe.FunGame.Core.Model
} }
} }
IEnumerator<Room> IEnumerable<Room>.GetEnumerator() IEnumerator IEnumerable.GetEnumerator()
{ {
foreach (Room room in ListRoom) return GetEnumerator();
{
yield return room;
}
} }
} }
} }

View File

@ -1,8 +1,10 @@
using System.Collections.Concurrent; using System.Collections;
using System.Collections.Concurrent;
using Milimoe.FunGame.Core.Entity;
namespace Milimoe.FunGame.Core.Service namespace Milimoe.FunGame.Core.Service
{ {
internal class ModelManager<T> internal class ModelManager<T> : IEnumerable<T>
{ {
/// <summary> /// <summary>
/// 目前的Model数量 /// 目前的Model数量
@ -17,7 +19,7 @@ namespace Milimoe.FunGame.Core.Service
/// <summary> /// <summary>
/// 可参与高并发的字典,但添加效率较低 /// 可参与高并发的字典,但添加效率较低
/// </summary> /// </summary>
private ConcurrentDictionary<string, T> Models { get; } = new(); private ConcurrentDictionary<string, T> Models { get; } = [];
/// <summary> /// <summary>
/// Init ModelManager /// Init ModelManager
@ -103,7 +105,20 @@ namespace Milimoe.FunGame.Core.Service
/// </summary> /// </summary>
internal List<T> GetList() internal List<T> GetList()
{ {
return Models.Values.ToList(); return [.. Models.Values];
}
public IEnumerator<T> GetEnumerator()
{
foreach (T instance in Models.Values)
{
yield return instance;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
} }
} }
} }