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
{
RawResponse = response,
Clients = ClientsFromStatus(response).ToArray(),
Map = GetValueFromStatus<string>(response, ParserRegex.GroupType.RConStatusMap, Configuration.MapStatus),
GameType = GetValueFromStatus<string>(response, ParserRegex.GroupType.RConStatusGametype, Configuration.GametypeStatus),

View File

@ -6,10 +6,11 @@ namespace IW4MAdmin.Application.RConParsers
/// <inheritdoc cref="IStatusResponse"/>
public class StatusResponse : IStatusResponse
{
public string Map { get; set; }
public string GameType { get; set; }
public string Hostname { get; set; }
public int? MaxClients { get; set; }
public EFClient[] Clients { get; set; }
public string Map { get; init; }
public string GameType { get; init; }
public string Hostname { get; init; }
public int? MaxClients { get; init; }
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>
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)
{
return coreEvent switch
@ -88,6 +93,7 @@ public interface IGameServerEventSubscriptions
ServerValueReceiveEvent serverValueReceiveEvent => ServerValueReceived?.InvokeAsync(serverValueReceiveEvent, token) ?? Task.CompletedTask,
ServerValueSetRequestEvent serverValueSetRequestEvent => ServerValueSetRequested?.InvokeAsync(serverValueSetRequestEvent, token) ?? Task.CompletedTask,
ServerValueSetCompleteEvent serverValueSetCompleteEvent => ServerValueSetCompleted?.InvokeAsync(serverValueSetCompleteEvent, token) ?? Task.CompletedTask,
ServerStatusReceiveEvent serverStatusReceiveEvent => ServerStatusReceived?.InvokeAsync(serverStatusReceiveEvent, token) ?? Task.CompletedTask,
_ => Task.CompletedTask
};
}

View File

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

View File

@ -868,7 +868,14 @@ namespace SharedLibraryCore
{
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)