IW4M-Admin/SharedLibraryCore/Helpers/ParserRegex.cs

111 lines
3.4 KiB
C#
Raw Normal View History

2019-01-27 17:40:08 -05:00
using System;
using System.Collections.Generic;
namespace SharedLibraryCore.Interfaces
{
public sealed class ParserRegex
{
/// <summary>
/// represents the logical mapping of information provided by
/// game logs, get status, and get dvar information
/// </summary>
2019-01-27 17:40:08 -05:00
public enum GroupType
{
EventType,
OriginNetworkId,
TargetNetworkId,
OriginClientNumber,
TargetClientNumber,
OriginName,
TargetName,
OriginTeam,
TargetTeam,
Weapon,
Damage,
MeansOfDeath,
HitLocation,
Message,
RConClientNumber = 100,
RConScore = 101,
RConPing = 102,
RConNetworkId = 103,
RConName = 104,
RConIpAddress = 105,
2019-02-01 20:49:25 -05:00
RConDvarName = 106,
RConDvarValue = 107,
RConDvarDefaultValue = 108,
RConDvarLatchedValue = 109,
RConDvarDomain = 110,
2019-11-18 15:02:35 -05:00
RConStatusMap = 111,
2020-08-05 10:30:02 -04:00
RConStatusGametype = 112,
2019-01-27 17:40:08 -05:00
AdditionalGroup = 200
}
public IParserPatternMatcher PatternMatcher { get; private set; }
private string pattern;
/// <summary>
/// stores the regular expression groups that will be mapped to group types
/// </summary>
public string Pattern
{
get => pattern;
set
{
pattern = value;
PatternMatcher.Compile(value);
}
}
/// <summary>
/// stores the mapping from group type to group index in the regular expression
/// </summary>
2019-01-27 17:40:08 -05:00
public Dictionary<GroupType, int> GroupMapping { get; private set; }
/// <summary>
/// helper method to enable script parsers to app regex mapping
/// the first parameter specifies the group type contained in the regex pattern
/// the second parameter specifies the group index to retrieve in the matched regex pattern
/// </summary>
/// <param name="mapKey">group type</param>
/// <param name="mapValue">group index</param>
2019-02-02 19:54:30 -05:00
public void AddMapping(object mapKey, object mapValue)
{
if (int.TryParse(mapKey.ToString(), out int key) && int.TryParse(mapValue.ToString(), out int value))
{
if (GroupMapping.ContainsKey((GroupType)key))
{
GroupMapping[(GroupType)key] = value;
}
else
{
GroupMapping.Add((GroupType)key, value);
}
}
2019-02-02 21:19:24 -05:00
if (mapKey.GetType() == typeof(GroupType) && mapValue.GetType().ToString() == "System.Int32")
{
GroupType k = (GroupType)Enum.Parse(typeof(GroupType), mapKey.ToString());
int v = int.Parse(mapValue.ToString());
if (GroupMapping.ContainsKey(k))
{
GroupMapping[k] = v;
}
else
{
GroupMapping.Add(k, v);
}
}
2019-02-02 19:54:30 -05:00
}
public ParserRegex(IParserPatternMatcher pattern)
2019-01-27 17:40:08 -05:00
{
GroupMapping = new Dictionary<GroupType, int>();
PatternMatcher = pattern;
2019-01-27 17:40:08 -05:00
}
}
}