#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>
/// 基于本地已连接的 <see cref="Socket"/> 创建新的数据请求<para/>
/// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequest(DataRequestType)"/> 创建一个新的请求
/// 插件则使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequestForAddon(DataRequestType)"/> 创建一个新的请求<para/>
/// </summary>
/// <param name="Socket"></param>
/// <param name="RequestType"></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>
/// 基于本地已连接的 <see cref="HTTPClient"/> 创建新的数据请求<para/>
/// 使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequest(DataRequestType)"/> 创建一个新的请求<para/>
/// 插件则使用 <see cref="RunTimeController"/> 中的 <see cref="RunTimeController.NewDataRequestForAddon(DataRequestType)"/> 创建一个新的请求<para/>
/// 此数据请求只能调用异步方法 <see cref="SendRequestAsync"/> 请求数据
/// </summary>
/// <param name="WebSocket"></param>
/// <param name="RequestType"></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>
/// 基于本地已连接的 <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"/> 提供的
/// </summary>
/// <param name="Socket"></param>
/// <param name="GamingType"></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>
/// 基于本地已连接的 <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="SendRequestAsync"/> 请求数据
/// </summary>
/// <param name="WebSocket"></param>
/// <param name="GamingType"></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>
@ -195,24 +201,27 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
private readonly DataRequestType RequestType = DataRequestType.UnKnown;
private readonly Guid RequestID = Guid.Empty;
private readonly bool IsLongRunning = false;
private readonly SocketRuntimeType RuntimeType = SocketRuntimeType.Client;
private Hashtable _ResultData = [];
private RequestResult _Result = RequestResult.Missing;
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.RequestType = RequestType;
this.RequestID = RequestID;
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.RequestType = RequestType;
this.RequestID = RequestID;
this.IsLongRunning = IsLongRunning;
this.RuntimeType = RuntimeType;
}
public void SendRequest()
@ -220,6 +229,12 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
try
{
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)
{
WaitForWorkDone();
@ -243,6 +258,12 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
try
{
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)
{
await WaitForWorkDoneAsync();
@ -303,24 +324,27 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
private readonly GamingType GamingType = GamingType.None;
private readonly Guid RequestID = Guid.Empty;
private readonly bool IsLongRunning = false;
private readonly SocketRuntimeType RuntimeType = SocketRuntimeType.Client;
private Hashtable _ResultData = [];
private RequestResult _Result = RequestResult.Missing;
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.GamingType = GamingType;
this.RequestID = RequestID;
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.GamingType = GamingType;
this.RequestID = RequestID;
this.IsLongRunning = IsLongRunning;
this.RuntimeType = RuntimeType;
}
public void SendRequest()
@ -328,6 +352,12 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
try
{
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)
{
WaitForWorkDone();
@ -351,6 +381,12 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
try
{
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)
{
await WaitForWorkDoneAsync();

View File

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

View File

@ -31,45 +31,51 @@
私有的实现类(这是局内请求的)
</summary>
</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>
基于本地已连接的 <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.NewDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.DataRequestType)"/> 创建一个新的请求<para/>
</summary>
<param name="Socket"></param>
<param name="RequestType"></param>
<param name="IsLongRunning"></param>
<param name="RuntimeType"></param>
</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>
基于本地已连接的 <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.NewDataRequestForAddon(Milimoe.FunGame.Core.Library.Constant.DataRequestType)"/> 创建一个新的请求<para/>
此数据请求只能调用异步方法 <see cref="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.SendRequestAsync"/> 请求数据
</summary>
<param name="WebSocket"></param>
<param name="RequestType"></param>
<param name="IsLongRunning"></param>
<param name="RuntimeType"></param>
</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>
基于本地已连接的 <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"/> 提供的
</summary>
<param name="Socket"></param>
<param name="GamingType"></param>
<param name="IsLongRunning"></param>
<param name="RuntimeType"></param>
</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>
基于本地已连接的 <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="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.SendRequestAsync"/> 请求数据
</summary>
<param name="WebSocket"></param>
<param name="GamingType"></param>
<param name="IsLongRunning"></param>
<param name="RuntimeType"></param>
</member>
<member name="M:Milimoe.FunGame.Core.Api.Transmittal.DataRequest.AddRequestData(System.String,System.Object)">
<summary>
@ -1378,19 +1384,37 @@
<returns></returns>
<exception cref="T:Milimoe.FunGame.ConnectFailedException"></exception>
</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>
基于本地已连接的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>
<param name="GamingType"></param>
<returns></returns>
<exception cref="T:Milimoe.FunGame.ConnectFailedException"></exception>
</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>
基于本地已连接的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>
<param name="GamingType"></param>
<returns></returns>

View File

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

View File

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

View File

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

View File

@ -18,9 +18,9 @@ namespace Milimoe.FunGame.Core.Model
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 : [];
@ -112,7 +112,7 @@ namespace Milimoe.FunGame.Core.Model
}
}
public IEnumerator GetEnumerator()
public IEnumerator<Room> GetEnumerator()
{
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)
{
yield return room;
}
return GetEnumerator();
}
}
}

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
{
internal class ModelManager<T>
internal class ModelManager<T> : IEnumerable<T>
{
/// <summary>
/// 目前的Model数量
@ -17,7 +19,7 @@ namespace Milimoe.FunGame.Core.Service
/// <summary>
/// 可参与高并发的字典,但添加效率较低
/// </summary>
private ConcurrentDictionary<string, T> Models { get; } = new();
private ConcurrentDictionary<string, T> Models { get; } = [];
/// <summary>
/// Init ModelManager
@ -103,7 +105,20 @@ namespace Milimoe.FunGame.Core.Service
/// </summary>
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();
}
}
}