grab gametype from status for T7
This commit is contained in:
parent
ed2b01f229
commit
b59504a882
@ -703,6 +703,7 @@ namespace IW4MAdmin
|
|||||||
var updatedClients = polledClients.Except(connectingClients).Except(disconnectingClients);
|
var updatedClients = polledClients.Except(connectingClients).Except(disconnectingClients);
|
||||||
|
|
||||||
UpdateMap(statusResponse.Item2);
|
UpdateMap(statusResponse.Item2);
|
||||||
|
UpdateGametype(statusResponse.Item3);
|
||||||
|
|
||||||
return new List<EFClient>[]
|
return new List<EFClient>[]
|
||||||
{
|
{
|
||||||
@ -724,6 +725,14 @@ namespace IW4MAdmin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateGametype(string gameType)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(gameType))
|
||||||
|
{
|
||||||
|
Gametype = gameType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async Task ShutdownInternal()
|
private async Task ShutdownInternal()
|
||||||
{
|
{
|
||||||
foreach (var client in GetClientsAsList())
|
foreach (var client in GetClientsAsList())
|
||||||
|
@ -52,6 +52,7 @@ namespace IW4MAdmin.Application.RconParsers
|
|||||||
Configuration.Dvar.AddMapping(ParserRegex.GroupType.RConDvarDomain, 5);
|
Configuration.Dvar.AddMapping(ParserRegex.GroupType.RConDvarDomain, 5);
|
||||||
|
|
||||||
Configuration.StatusHeader.Pattern = "num +score +ping +guid +name +lastmsg +address +qport +rate *";
|
Configuration.StatusHeader.Pattern = "num +score +ping +guid +name +lastmsg +address +qport +rate *";
|
||||||
|
Configuration.GametypeStatus.Pattern = "";
|
||||||
Configuration.MapStatus.Pattern = @"map: (([a-z]|_|\d)+)";
|
Configuration.MapStatus.Pattern = @"map: (([a-z]|_|\d)+)";
|
||||||
Configuration.MapStatus.AddMapping(ParserRegex.GroupType.RConStatusMap, 1);
|
Configuration.MapStatus.AddMapping(ParserRegex.GroupType.RConStatusMap, 1);
|
||||||
|
|
||||||
@ -114,7 +115,7 @@ namespace IW4MAdmin.Application.RconParsers
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual async Task<(List<EFClient>, string)> GetStatusAsync(IRConConnection connection)
|
public virtual async Task<(List<EFClient>, string, string)> GetStatusAsync(IRConConnection connection)
|
||||||
{
|
{
|
||||||
string[] response = await connection.SendQueryAsync(StaticHelpers.QueryType.COMMAND_STATUS);
|
string[] response = await connection.SendQueryAsync(StaticHelpers.QueryType.COMMAND_STATUS);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@ -123,7 +124,7 @@ namespace IW4MAdmin.Application.RconParsers
|
|||||||
Console.WriteLine(line);
|
Console.WriteLine(line);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return (ClientsFromStatus(response), MapFromStatus(response));
|
return (ClientsFromStatus(response), MapFromStatus(response), GameTypeFromStatus(response));
|
||||||
}
|
}
|
||||||
|
|
||||||
private string MapFromStatus(string[] response)
|
private string MapFromStatus(string[] response)
|
||||||
@ -141,6 +142,26 @@ namespace IW4MAdmin.Application.RconParsers
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GameTypeFromStatus(string[] response)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(Configuration.GametypeStatus.Pattern))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
string gametype = null;
|
||||||
|
foreach (var line in response)
|
||||||
|
{
|
||||||
|
var regex = Regex.Match(line, Configuration.GametypeStatus.Pattern);
|
||||||
|
if (regex.Success)
|
||||||
|
{
|
||||||
|
gametype = regex.Groups[Configuration.GametypeStatus.GroupMapping[ParserRegex.GroupType.RConStatusGametype]].ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return gametype;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool> SetDvarAsync(IRConConnection connection, string dvarName, object dvarValue)
|
public async Task<bool> SetDvarAsync(IRConConnection connection, string dvarName, object dvarValue)
|
||||||
{
|
{
|
||||||
string dvarString = (dvarValue is string str)
|
string dvarString = (dvarValue is string str)
|
||||||
|
@ -14,6 +14,7 @@ namespace IW4MAdmin.Application.RconParsers
|
|||||||
public CommandPrefix CommandPrefixes { get; set; }
|
public CommandPrefix CommandPrefixes { get; set; }
|
||||||
public ParserRegex Status { get; set; }
|
public ParserRegex Status { get; set; }
|
||||||
public ParserRegex MapStatus { get; set; }
|
public ParserRegex MapStatus { get; set; }
|
||||||
|
public ParserRegex GametypeStatus { get; set; }
|
||||||
public ParserRegex Dvar { get; set; }
|
public ParserRegex Dvar { get; set; }
|
||||||
public ParserRegex StatusHeader { get; set; }
|
public ParserRegex StatusHeader { get; set; }
|
||||||
public string ServerNotRunningResponse { get; set; }
|
public string ServerNotRunningResponse { get; set; }
|
||||||
@ -26,6 +27,7 @@ namespace IW4MAdmin.Application.RconParsers
|
|||||||
{
|
{
|
||||||
Status = parserRegexFactory.CreateParserRegex();
|
Status = parserRegexFactory.CreateParserRegex();
|
||||||
MapStatus = parserRegexFactory.CreateParserRegex();
|
MapStatus = parserRegexFactory.CreateParserRegex();
|
||||||
|
GametypeStatus = parserRegexFactory.CreateParserRegex();
|
||||||
Dvar = parserRegexFactory.CreateParserRegex();
|
Dvar = parserRegexFactory.CreateParserRegex();
|
||||||
StatusHeader = parserRegexFactory.CreateParserRegex();
|
StatusHeader = parserRegexFactory.CreateParserRegex();
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ var eventParser;
|
|||||||
|
|
||||||
var plugin = {
|
var plugin = {
|
||||||
author: 'RaidMax',
|
author: 'RaidMax',
|
||||||
version: 0.2,
|
version: 0.3,
|
||||||
name: 'Black Ops 3 Parser',
|
name: 'Black Ops 3 Parser',
|
||||||
isParser: true,
|
isParser: true,
|
||||||
|
|
||||||
@ -23,6 +23,8 @@ var plugin = {
|
|||||||
rconParser.Configuration.CommandPrefixes.RConGetDvar = '\xff\xff\xff\xff\x00{0} {1}';
|
rconParser.Configuration.CommandPrefixes.RConGetDvar = '\xff\xff\xff\xff\x00{0} {1}';
|
||||||
rconParser.Configuration.CommandPrefixes.RConSetDvar = '\xff\xff\xff\xff\x00{0} set {1}';
|
rconParser.Configuration.CommandPrefixes.RConSetDvar = '\xff\xff\xff\xff\x00{0} set {1}';
|
||||||
rconParser.Configuration.CommandPrefixes.RConResponse = '\xff\xff\xff\xff\x01';
|
rconParser.Configuration.CommandPrefixes.RConResponse = '\xff\xff\xff\xff\x01';
|
||||||
|
rconParser.Configuration.GametypeStatus.Pattern = 'Gametype: (.+)';
|
||||||
|
rconParser.Configuration.MapStatus.Pattern = 'Map: (.+)';
|
||||||
rconParser.Configuration.CommandPrefixes.RConGetInfo = undefined; // disables this, because it's useless on T7
|
rconParser.Configuration.CommandPrefixes.RConGetInfo = undefined; // disables this, because it's useless on T7
|
||||||
rconParser.Configuration.ServerNotRunningResponse = 'this is here to prevent a hiberating server from being detected as not running';
|
rconParser.Configuration.ServerNotRunningResponse = 'this is here to prevent a hiberating server from being detected as not running';
|
||||||
|
|
||||||
@ -34,6 +36,7 @@ var plugin = {
|
|||||||
rconParser.Configuration.DefaultDvarValues.Add('fs_game', '');
|
rconParser.Configuration.DefaultDvarValues.Add('fs_game', '');
|
||||||
|
|
||||||
rconParser.Configuration.Status.AddMapping(105, 6); // ip address
|
rconParser.Configuration.Status.AddMapping(105, 6); // ip address
|
||||||
|
rconParser.Configuration.GametypeStatus.AddMapping(112, 1); // gametype
|
||||||
rconParser.Version = '[local] ship win64 CODBUILD8-764 (3421987) Mon Dec 16 10:44:20 2019 10d27bef';
|
rconParser.Version = '[local] ship win64 CODBUILD8-764 (3421987) Mon Dec 16 10:44:20 2019 10d27bef';
|
||||||
rconParser.GameName = 8; // BO3
|
rconParser.GameName = 8; // BO3
|
||||||
rconParser.CanGenerateLogPath = false;
|
rconParser.CanGenerateLogPath = false;
|
||||||
|
@ -37,6 +37,7 @@ namespace SharedLibraryCore.Interfaces
|
|||||||
RConDvarLatchedValue = 109,
|
RConDvarLatchedValue = 109,
|
||||||
RConDvarDomain = 110,
|
RConDvarDomain = 110,
|
||||||
RConStatusMap = 111,
|
RConStatusMap = 111,
|
||||||
|
RConStatusGametype = 112,
|
||||||
AdditionalGroup = 200
|
AdditionalGroup = 200
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,8 +38,8 @@ namespace SharedLibraryCore.Interfaces
|
|||||||
/// get the list of connected clients from status response
|
/// get the list of connected clients from status response
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="connection">RCon connection to use</param>
|
/// <param name="connection">RCon connection to use</param>
|
||||||
/// <returns>list of clients, and current map</returns>
|
/// <returns>list of clients, current map, and current gametype</returns>
|
||||||
Task<(List<EFClient>, string)> GetStatusAsync(IRConConnection connection);
|
Task<(List<EFClient>, string, string)> GetStatusAsync(IRConConnection connection);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// stores the RCon configuration
|
/// stores the RCon configuration
|
||||||
|
@ -21,6 +21,11 @@ namespace SharedLibraryCore.Interfaces
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
ParserRegex MapStatus { get; set; }
|
ParserRegex MapStatus { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// stores regex info for parsing the gametype line from rcon status response
|
||||||
|
/// </summary>
|
||||||
|
ParserRegex GametypeStatus { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// stores the regex info for parsing get DVAR responses
|
/// stores the regex info for parsing get DVAR responses
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -786,7 +786,7 @@ namespace SharedLibraryCore
|
|||||||
return await server.RconParser.ExecuteCommandAsync(server.RemoteConnection, commandName);
|
return await server.RconParser.ExecuteCommandAsync(server.RemoteConnection, commandName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Task<(List<EFClient>, string)> GetStatusAsync(this Server server)
|
public static Task<(List<EFClient>, string, string)> GetStatusAsync(this Server server)
|
||||||
{
|
{
|
||||||
return server.RconParser.GetStatusAsync(server.RemoteConnection);
|
return server.RconParser.GetStatusAsync(server.RemoteConnection);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user