1
0
mirror of https://github.com/RaidMax/IW4M-Admin.git synced 2025-06-07 21:58:06 -05:00

Add server status received event including raw response

This commit is contained in:
RaidMax 2024-02-17 15:33:15 -06:00
parent d325993670
commit b286548906
6 changed files with 37 additions and 8 deletions

View File

@ -175,6 +175,7 @@ namespace IW4MAdmin.Application.RConParsers
return new StatusResponse return new StatusResponse
{ {
RawResponse = response,
Clients = ClientsFromStatus(response).ToArray(), Clients = ClientsFromStatus(response).ToArray(),
Map = GetValueFromStatus<string>(response, ParserRegex.GroupType.RConStatusMap, Configuration.MapStatus), Map = GetValueFromStatus<string>(response, ParserRegex.GroupType.RConStatusMap, Configuration.MapStatus),
GameType = GetValueFromStatus<string>(response, ParserRegex.GroupType.RConStatusGametype, Configuration.GametypeStatus), GameType = GetValueFromStatus<string>(response, ParserRegex.GroupType.RConStatusGametype, Configuration.GametypeStatus),

View File

@ -6,10 +6,11 @@ namespace IW4MAdmin.Application.RConParsers
/// <inheritdoc cref="IStatusResponse"/> /// <inheritdoc cref="IStatusResponse"/>
public class StatusResponse : IStatusResponse public class StatusResponse : IStatusResponse
{ {
public string Map { get; set; } public string Map { get; init; }
public string GameType { get; set; } public string GameType { get; init; }
public string Hostname { get; set; } public string Hostname { get; init; }
public int? MaxClients { get; set; } public int? MaxClients { get; init; }
public EFClient[] Clients { get; set; } public EFClient[] Clients { get; init; }
public string[] RawResponse { get; set; }
} }
} }

View File

@ -0,0 +1,9 @@
using SharedLibraryCore.Interfaces;
namespace SharedLibraryCore.Events.Server;
public class ServerStatusReceiveEvent : GameServerEvent
{
public IStatusResponse Response { get; set; }
public string RawData { get; set; }
}

View File

@ -73,6 +73,11 @@ public interface IGameServerEventSubscriptions
/// </summary> /// </summary>
static event Func<ServerValueSetCompleteEvent, CancellationToken, Task> ServerValueSetCompleted; static event Func<ServerValueSetCompleteEvent, CancellationToken, Task> ServerValueSetCompleted;
/// <summary>
/// Raised when a server's status response is received
/// </summary>
static event Func<ServerStatusReceiveEvent, CancellationToken, Task> ServerStatusReceived;
static Task InvokeEventAsync(CoreEvent coreEvent, CancellationToken token) static Task InvokeEventAsync(CoreEvent coreEvent, CancellationToken token)
{ {
return coreEvent switch return coreEvent switch
@ -88,6 +93,7 @@ public interface IGameServerEventSubscriptions
ServerValueReceiveEvent serverValueReceiveEvent => ServerValueReceived?.InvokeAsync(serverValueReceiveEvent, token) ?? Task.CompletedTask, ServerValueReceiveEvent serverValueReceiveEvent => ServerValueReceived?.InvokeAsync(serverValueReceiveEvent, token) ?? Task.CompletedTask,
ServerValueSetRequestEvent serverValueSetRequestEvent => ServerValueSetRequested?.InvokeAsync(serverValueSetRequestEvent, token) ?? Task.CompletedTask, ServerValueSetRequestEvent serverValueSetRequestEvent => ServerValueSetRequested?.InvokeAsync(serverValueSetRequestEvent, token) ?? Task.CompletedTask,
ServerValueSetCompleteEvent serverValueSetCompleteEvent => ServerValueSetCompleted?.InvokeAsync(serverValueSetCompleteEvent, token) ?? Task.CompletedTask, ServerValueSetCompleteEvent serverValueSetCompleteEvent => ServerValueSetCompleted?.InvokeAsync(serverValueSetCompleteEvent, token) ?? Task.CompletedTask,
ServerStatusReceiveEvent serverStatusReceiveEvent => ServerStatusReceived?.InvokeAsync(serverStatusReceiveEvent, token) ?? Task.CompletedTask,
_ => Task.CompletedTask _ => Task.CompletedTask
}; };
} }

View File

@ -31,5 +31,10 @@ namespace SharedLibraryCore.Interfaces
/// active clients /// active clients
/// </summary> /// </summary>
EFClient[] Clients { get; } EFClient[] Clients { get; }
/// <summary>
/// raw text data from the game server
/// </summary>
string[] RawResponse { get; }
} }
} }

View File

@ -868,7 +868,14 @@ namespace SharedLibraryCore
{ {
try try
{ {
return await server.RconParser.GetStatusAsync(server.RemoteConnection, token); var response = await server.RconParser.GetStatusAsync(server.RemoteConnection, token);
server.Manager.QueueEvent(new ServerStatusReceiveEvent
{
Response = response
});
return response;
} }
catch (TaskCanceledException) catch (TaskCanceledException)