Finish RCON dynamic parser impl

Fix configuration generation bug
This commit is contained in:
RaidMax 2019-01-27 18:41:54 -06:00
parent e6154822f6
commit ca535019c6
8 changed files with 116 additions and 105 deletions

View File

@ -214,18 +214,14 @@ namespace IW4MAdmin.Application
{ {
Running = true; Running = true;
#region DATABASE
using (var db = new DatabaseContext(GetApplicationSettings().Configuration()?.ConnectionString,
GetApplicationSettings().Configuration()?.DatabaseProvider))
{
await new ContextSeed(db).Seed();
}
PrivilegedClients = (await ClientSvc.GetPrivilegedClients()).ToDictionary(_client => _client.ClientId);
#endregion
#region CONFIG #region CONFIG
var config = ConfigHandler.Configuration(); ApplicationConfiguration config = null;
try
{
config = ConfigHandler.Configuration();
}
catch { }
// copy over default config if it doesn't exist // copy over default config if it doesn't exist
if (config == null) if (config == null)
@ -278,6 +274,17 @@ namespace IW4MAdmin.Application
Utilities.EncodingType = Encoding.GetEncoding(!string.IsNullOrEmpty(config.CustomParserEncoding) ? config.CustomParserEncoding : "windows-1252"); Utilities.EncodingType = Encoding.GetEncoding(!string.IsNullOrEmpty(config.CustomParserEncoding) ? config.CustomParserEncoding : "windows-1252");
#endregion #endregion
#region DATABASE
using (var db = new DatabaseContext(GetApplicationSettings().Configuration()?.ConnectionString,
GetApplicationSettings().Configuration()?.DatabaseProvider))
{
await new ContextSeed(db).Seed();
}
PrivilegedClients = (await ClientSvc.GetPrivilegedClients()).ToDictionary(_client => _client.ClientId);
#endregion
#region PLUGINS #region PLUGINS
SharedLibraryCore.Plugins.PluginImporter.Load(this); SharedLibraryCore.Plugins.PluginImporter.Load(this);
@ -564,8 +571,14 @@ namespace IW4MAdmin.Application
return PageList; return PageList;
} }
public IRConParser GenerateDynamicRConParser() => new DynamicRConParser(); public IRConParser GenerateDynamicRConParser()
{
return new DynamicRConParser();
}
public IEventParser GenerateDynamicEventParser() => new DynamicEventParser(); public IEventParser GenerateDynamicEventParser()
{
return new DynamicEventParser();
}
} }
} }

View File

@ -6,19 +6,11 @@ namespace IW4MAdmin.Application.EventParsers
{ {
public string GameDirectory { get; set; } public string GameDirectory { get; set; }
public ParserRegex Say { get; set; } public ParserRegex Say { get; set; } = new ParserRegex();
public ParserRegex Join { get; set; } public ParserRegex Join { get; set; } = new ParserRegex();
public ParserRegex Quit { get; set; } public ParserRegex Quit { get; set; } = new ParserRegex();
public ParserRegex Kill { get; set; } public ParserRegex Kill { get; set; } = new ParserRegex();
public ParserRegex Damage { get; set; } public ParserRegex Damage { get; set; } = new ParserRegex();
public ParserRegex Action { get; set; } = new ParserRegex();
public DynamicEventParserConfiguration()
{
Say = new ParserRegex();
Join = new ParserRegex();
Quit = new ParserRegex();
Kill = new ParserRegex();
Damage = new ParserRegex();
}
} }
} }

View File

@ -9,66 +9,64 @@ namespace IW4MAdmin.Application.EventParsers
{ {
class IW4EventParser : IEventParser class IW4EventParser : IEventParser
{ {
private IEventParserConfiguration _configuration;
public IW4EventParser() public IW4EventParser()
{ {
_configuration = new DynamicEventParserConfiguration() Configuration = new DynamicEventParserConfiguration()
{ {
GameDirectory = "userraw", GameDirectory = "userraw",
}; };
_configuration.Say.Pattern = @"^(say|sayteam);(.{1,32});([0-9]+)(.*);(.*)$"; Configuration.Say.Pattern = @"^(say|sayteam);(.{1,32});([0-9]+)(.*);(.*)$";
_configuration.Say.GroupMapping.Add(ParserRegex.GroupType.EventType, 1); Configuration.Say.GroupMapping.Add(ParserRegex.GroupType.EventType, 1);
_configuration.Say.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 2); Configuration.Say.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 2);
_configuration.Say.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 3); Configuration.Say.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 3);
_configuration.Say.GroupMapping.Add(ParserRegex.GroupType.OriginName, 4); Configuration.Say.GroupMapping.Add(ParserRegex.GroupType.OriginName, 4);
_configuration.Say.GroupMapping.Add(ParserRegex.GroupType.Message, 5); Configuration.Say.GroupMapping.Add(ParserRegex.GroupType.Message, 5);
_configuration.Quit.Pattern = @"^(Q);(.{16,32}|bot[0-9]+);([0-9]+);(.*)$"; Configuration.Quit.Pattern = @"^(Q);(.{16,32}|bot[0-9]+);([0-9]+);(.*)$";
_configuration.Quit.GroupMapping.Add(ParserRegex.GroupType.EventType, 1); Configuration.Quit.GroupMapping.Add(ParserRegex.GroupType.EventType, 1);
_configuration.Quit.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 2); Configuration.Quit.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 2);
_configuration.Quit.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 3); Configuration.Quit.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 3);
_configuration.Quit.GroupMapping.Add(ParserRegex.GroupType.OriginName, 4); Configuration.Quit.GroupMapping.Add(ParserRegex.GroupType.OriginName, 4);
_configuration.Join.Pattern = @"^(J);(.{16,32}|bot[0-9]+);([0-9]+);(.*)$"; Configuration.Join.Pattern = @"^(J);(.{16,32}|bot[0-9]+);([0-9]+);(.*)$";
_configuration.Join.GroupMapping.Add(ParserRegex.GroupType.EventType, 1); Configuration.Join.GroupMapping.Add(ParserRegex.GroupType.EventType, 1);
_configuration.Join.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 2); Configuration.Join.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 2);
_configuration.Join.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 3); Configuration.Join.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 3);
_configuration.Join.GroupMapping.Add(ParserRegex.GroupType.OriginName, 4); Configuration.Join.GroupMapping.Add(ParserRegex.GroupType.OriginName, 4);
_configuration.Damage.Pattern = @"^(D);([A-Fa-f0-9_]{16,32}|bot[0-9]+);(-?[0-9]+);(axis|allies|world);(.{1,24});([A-Fa-f0-9_]{16,32}|bot[0-9]+)?;-?([0-9]+);(axis|allies|world);(.{1,24})?;((?:[0-9]+|[a-z]+|_)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$"; Configuration.Damage.Pattern = @"^(D);([A-Fa-f0-9_]{16,32}|bot[0-9]+);(-?[0-9]+);(axis|allies|world);(.{1,24});([A-Fa-f0-9_]{16,32}|bot[0-9]+)?;-?([0-9]+);(axis|allies|world);(.{1,24})?;((?:[0-9]+|[a-z]+|_)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$";
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.EventType, 1); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.EventType, 1);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.TargetNetworkId, 2); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.TargetNetworkId, 2);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.TargetClientNumber, 3); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.TargetClientNumber, 3);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.TargetTeam, 4); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.TargetTeam, 4);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.TargetName, 5); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.TargetName, 5);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 6); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 6);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 7); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 7);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.OriginTeam, 8); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.OriginTeam, 8);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.OriginName, 9); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.OriginName, 9);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.Weapon, 10); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.Weapon, 10);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.Damage, 11); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.Damage, 11);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.MeansOfDeath, 12); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.MeansOfDeath, 12);
_configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.HitLocation, 13); Configuration.Damage.GroupMapping.Add(ParserRegex.GroupType.HitLocation, 13);
_configuration.Kill.Pattern = @"^(K);([A-Fa-f0-9_]{16,32}|bot[0-9]+);(-?[0-9]+);(axis|allies|world);(.{1,24});([A-Fa-f0-9_]{16,32}|bot[0-9]+)?;-?([0-9]+);(axis|allies|world);(.{1,24})?;((?:[0-9]+|[a-z]+|_)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$"; Configuration.Kill.Pattern = @"^(K);([A-Fa-f0-9_]{16,32}|bot[0-9]+);(-?[0-9]+);(axis|allies|world);(.{1,24});([A-Fa-f0-9_]{16,32}|bot[0-9]+)?;-?([0-9]+);(axis|allies|world);(.{1,24})?;((?:[0-9]+|[a-z]+|_)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$";
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.EventType, 1); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.EventType, 1);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.TargetNetworkId, 2); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.TargetNetworkId, 2);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.TargetClientNumber, 3); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.TargetClientNumber, 3);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.TargetTeam, 4); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.TargetTeam, 4);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.TargetName, 5); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.TargetName, 5);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 6); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.OriginNetworkId, 6);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 7); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.OriginClientNumber, 7);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.OriginTeam, 8); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.OriginTeam, 8);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.OriginName, 9); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.OriginName, 9);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.Weapon, 10); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.Weapon, 10);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.Damage, 11); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.Damage, 11);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.MeansOfDeath, 12); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.MeansOfDeath, 12);
_configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.HitLocation, 13); Configuration.Kill.GroupMapping.Add(ParserRegex.GroupType.HitLocation, 13);
} }
public IEventParserConfiguration Configuration { get => _configuration; set => _configuration = value; } public IEventParserConfiguration Configuration { get; set; }
public virtual GameEvent GetEvent(Server server, string logLine) public virtual GameEvent GetEvent(Server server, string logLine)
{ {
@ -92,18 +90,18 @@ namespace IW4MAdmin.Application.EventParsers
if (eventType == "say" || eventType == "sayteam") if (eventType == "say" || eventType == "sayteam")
{ {
var matchResult = Regex.Match(logLine, _configuration.Say.Pattern); var matchResult = Regex.Match(logLine, Configuration.Say.Pattern);
if (matchResult.Success) if (matchResult.Success)
{ {
string message = matchResult string message = matchResult
.Groups[_configuration.Say.GroupMapping[ParserRegex.GroupType.Message]] .Groups[Configuration.Say.GroupMapping[ParserRegex.GroupType.Message]]
.ToString() .ToString()
.Replace("\x15", "") .Replace("\x15", "")
.Trim(); .Trim();
var origin = server.GetClientsAsList() var origin = server.GetClientsAsList()
.First(c => c.NetworkId == matchResult.Groups[_configuration.Say.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong()); .First(c => c.NetworkId == matchResult.Groups[Configuration.Say.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong());
if (message[0] == '!' || message[0] == '@') if (message[0] == '!' || message[0] == '@')
{ {
@ -132,14 +130,14 @@ namespace IW4MAdmin.Application.EventParsers
{ {
if (!server.CustomCallback) if (!server.CustomCallback)
{ {
var match = Regex.Match(logLine, _configuration.Kill.Pattern); var match = Regex.Match(logLine, Configuration.Kill.Pattern);
if (match.Success) if (match.Success)
{ {
var origin = server.GetClientsAsList() var origin = server.GetClientsAsList()
.First(c => c.NetworkId == match.Groups[_configuration.Kill.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong()); .First(c => c.NetworkId == match.Groups[Configuration.Kill.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong());
var target = server.GetClientsAsList() var target = server.GetClientsAsList()
.First(c => c.NetworkId == match.Groups[_configuration.Kill.GroupMapping[ParserRegex.GroupType.TargetNetworkId]].ToString().ConvertLong()); .First(c => c.NetworkId == match.Groups[Configuration.Kill.GroupMapping[ParserRegex.GroupType.TargetNetworkId]].ToString().ConvertLong());
return new GameEvent() return new GameEvent()
@ -186,16 +184,16 @@ namespace IW4MAdmin.Application.EventParsers
// damage // damage
if (eventType == "D") if (eventType == "D")
{ {
// if (!server.CustomCallback) if (!server.CustomCallback)
{ {
var regexMatch = Regex.Match(logLine, _configuration.Damage.Pattern); var regexMatch = Regex.Match(logLine, Configuration.Damage.Pattern);
if (regexMatch.Success) if (regexMatch.Success)
{ {
var origin = server.GetClientsAsList() var origin = server.GetClientsAsList()
.First(c => c.NetworkId == regexMatch.Groups[_configuration.Damage.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong()); .First(c => c.NetworkId == regexMatch.Groups[Configuration.Damage.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong());
var target = server.GetClientsAsList() var target = server.GetClientsAsList()
.First(c => c.NetworkId == regexMatch.Groups[_configuration.Damage.GroupMapping[ParserRegex.GroupType.TargetNetworkId]].ToString().ConvertLong()); .First(c => c.NetworkId == regexMatch.Groups[Configuration.Damage.GroupMapping[ParserRegex.GroupType.TargetNetworkId]].ToString().ConvertLong());
return new GameEvent() return new GameEvent()
{ {
@ -212,7 +210,7 @@ namespace IW4MAdmin.Application.EventParsers
// join // join
if (eventType == "J") if (eventType == "J")
{ {
var regexMatch = Regex.Match(logLine, _configuration.Join.Pattern); var regexMatch = Regex.Match(logLine, Configuration.Join.Pattern);
if (regexMatch.Success) if (regexMatch.Success)
{ {
return new GameEvent() return new GameEvent()
@ -225,10 +223,10 @@ namespace IW4MAdmin.Application.EventParsers
CurrentAlias = new EFAlias() CurrentAlias = new EFAlias()
{ {
Active = false, Active = false,
Name = regexMatch.Groups[_configuration.Join.GroupMapping[ParserRegex.GroupType.OriginName]].ToString().StripColors(), Name = regexMatch.Groups[Configuration.Join.GroupMapping[ParserRegex.GroupType.OriginName]].ToString().StripColors(),
}, },
NetworkId = regexMatch.Groups[_configuration.Join.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong(), NetworkId = regexMatch.Groups[Configuration.Join.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong(),
ClientNumber = Convert.ToInt32(regexMatch.Groups[_configuration.Join.GroupMapping[ParserRegex.GroupType.OriginClientNumber]].ToString()), ClientNumber = Convert.ToInt32(regexMatch.Groups[Configuration.Join.GroupMapping[ParserRegex.GroupType.OriginClientNumber]].ToString()),
State = EFClient.ClientState.Connecting, State = EFClient.ClientState.Connecting,
CurrentServer = server CurrentServer = server
} }
@ -238,7 +236,7 @@ namespace IW4MAdmin.Application.EventParsers
if (eventType == "Q") if (eventType == "Q")
{ {
var regexMatch = Regex.Match(logLine, _configuration.Quit.Pattern); var regexMatch = Regex.Match(logLine, Configuration.Quit.Pattern);
if (regexMatch.Success) if (regexMatch.Success)
{ {
return new GameEvent() return new GameEvent()
@ -251,10 +249,10 @@ namespace IW4MAdmin.Application.EventParsers
CurrentAlias = new EFAlias() CurrentAlias = new EFAlias()
{ {
Active = false, Active = false,
Name = regexMatch.Groups[_configuration.Quit.GroupMapping[ParserRegex.GroupType.OriginName]].ToString().StripColors() Name = regexMatch.Groups[Configuration.Quit.GroupMapping[ParserRegex.GroupType.OriginName]].ToString().StripColors()
}, },
NetworkId = regexMatch.Groups[_configuration.Quit.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong(), NetworkId = regexMatch.Groups[Configuration.Quit.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertLong(),
ClientNumber = Convert.ToInt32(regexMatch.Groups[_configuration.Quit.GroupMapping[ParserRegex.GroupType.OriginClientNumber]].ToString()), ClientNumber = Convert.ToInt32(regexMatch.Groups[Configuration.Quit.GroupMapping[ParserRegex.GroupType.OriginClientNumber]].ToString()),
State = EFClient.ClientState.Disconnecting State = EFClient.ClientState.Disconnecting
} }
}; };

View File

@ -8,6 +8,6 @@ namespace IW4MAdmin.Application.RconParsers
{ {
public CommandPrefix CommandPrefixes { get; set; } public CommandPrefix CommandPrefixes { get; set; }
public Server.Game GameName { get; set; } public Server.Game GameName { get; set; }
public string StatusRegex { get; set; } public ParserRegex Status { get; set; } = new ParserRegex();
} }
} }

View File

@ -25,9 +25,16 @@ namespace IW4MAdmin.Application.RconParsers
Ban = "clientkick {0} \"{1}\"", Ban = "clientkick {0} \"{1}\"",
TempBan = "tempbanclient {0} \"{1}\"" TempBan = "tempbanclient {0} \"{1}\""
}, },
StatusRegex = @"^( *[0-9]+) +-*([0-9]+) +((?:[A-Z]+|[0-9]+)) +((?:[a-z]|[0-9]){16}|(?:[a-z]|[0-9]){32}|bot[0-9]+|(?:[0-9]+)) *(.{0,32}) +([0-9]+) +(\d+\.\d+\.\d+.\d+\:-*\d{1,5}|0+.0+:-*\d{1,5}|loopback) +(-*[0-9]+) +([0-9]+) *$",
GameName = Server.Game.IW4 GameName = Server.Game.IW4
}; };
Configuration.Status.Pattern = @"^ *([0-9]+) +-?([0-9]+) +((?:[A-Z]+|[0-9]+)) +((?:[a-z]|[0-9]){16}|(?:[a-z]|[0-9]){32}|bot[0-9]+|(?:[0-9]+)) *(.{0,32}) +([0-9]+) +(\d+\.\d+\.\d+.\d+\:-*\d{1,5}|0+.0+:-*\d{1,5}|loopback) +(-*[0-9]+) +([0-9]+) *$";
Configuration.Status.GroupMapping.Add(ParserRegex.GroupType.RConClientNumber, 1);
Configuration.Status.GroupMapping.Add(ParserRegex.GroupType.RConScore, 2);
Configuration.Status.GroupMapping.Add(ParserRegex.GroupType.RConPing, 3);
Configuration.Status.GroupMapping.Add(ParserRegex.GroupType.RConNetworkId, 4);
Configuration.Status.GroupMapping.Add(ParserRegex.GroupType.RConName, 5);
Configuration.Status.GroupMapping.Add(ParserRegex.GroupType.RConIpAddress, 6);
} }
public IRConParserConfiguration Configuration { get; set; } public IRConParserConfiguration Configuration { get; set; }
@ -49,6 +56,7 @@ namespace IW4MAdmin.Application.RconParsers
throw e; throw e;
} }
// todo: can this be made more portable and modifiable from plugin
string[] ValueSplit = LineSplit[1].Split(new char[] { '"' }, StringSplitOptions.RemoveEmptyEntries); string[] ValueSplit = LineSplit[1].Split(new char[] { '"' }, StringSplitOptions.RemoveEmptyEntries);
if (ValueSplit.Length < 5) if (ValueSplit.Length < 5)
@ -93,25 +101,25 @@ namespace IW4MAdmin.Application.RconParsers
{ {
String responseLine = S.Trim(); String responseLine = S.Trim();
var regex = Regex.Match(responseLine, Configuration.StatusRegex, RegexOptions.IgnoreCase); var regex = Regex.Match(responseLine, Configuration.Status.Pattern, RegexOptions.IgnoreCase);
if (regex.Success) if (regex.Success)
{ {
validMatches++; validMatches++;
int clientNumber = int.Parse(regex.Groups[1].Value); int clientNumber = int.Parse(regex.Groups[Configuration.Status.GroupMapping[ParserRegex.GroupType.RConClientNumber]].Value);
int score = int.Parse(regex.Groups[2].Value); int score = int.Parse(regex.Groups[Configuration.Status.GroupMapping[ParserRegex.GroupType.RConScore]].Value);
int ping = 999; int ping = 999;
// their state can be CNCT, ZMBI etc // their state can be CNCT, ZMBI etc
if (regex.Groups[3].Value.Length <= 3) if (regex.Groups[Configuration.Status.GroupMapping[ParserRegex.GroupType.RConPing]].Value.Length <= 3)
{ {
ping = int.Parse(regex.Groups[3].Value); ping = int.Parse(regex.Groups[Configuration.Status.GroupMapping[ParserRegex.GroupType.RConPing]].Value);
} }
long networkId = regex.Groups[4].Value.ConvertLong(); long networkId = regex.Groups[Configuration.Status.GroupMapping[ParserRegex.GroupType.RConNetworkId]].Value.ConvertLong();
string name = regex.Groups[5].Value.StripColors().Trim(); string name = regex.Groups[Configuration.Status.GroupMapping[ParserRegex.GroupType.RConName]].Value.StripColors().Trim();
int? ip = regex.Groups[7].Value.Split(':')[0].ConvertToIP(); int? ip = regex.Groups[Configuration.Status.GroupMapping[ParserRegex.GroupType.RConIpAddress]].Value.Split(':')[0].ConvertToIP();
var client = new EFClient() var client = new EFClient()
{ {

View File

@ -8,5 +8,6 @@
ParserRegex Quit { get; set; } ParserRegex Quit { get; set; }
ParserRegex Kill { get; set; } ParserRegex Kill { get; set; }
ParserRegex Damage { get; set; } ParserRegex Damage { get; set; }
ParserRegex Action { get; set; }
} }
} }

View File

@ -6,6 +6,6 @@ namespace SharedLibraryCore.Interfaces
{ {
CommandPrefix CommandPrefixes { get; set; } CommandPrefix CommandPrefixes { get; set; }
Server.Game GameName { get; set; } Server.Game GameName { get; set; }
string StatusRegex { get; set; } ParserRegex Status { get; set; }
} }
} }

View File

@ -94,7 +94,6 @@ namespace SharedLibraryCore
Manager.AdditionalRConParsers.Add(rconParser); Manager.AdditionalRConParsers.Add(rconParser);
} }
if (!firstRun) if (!firstRun)
{ {
await OnLoadAsync(mgr); await OnLoadAsync(mgr);