1
0
mirror of https://github.com/RaidMax/IW4M-Admin.git synced 2025-06-10 23:31:13 -05:00

adding Cod4 support (for steam GUID is truncated to 16 characters)

exit properly whoops
add all linked accounts to drop down
consolidate linked admin accounts to the most recently seen one
limited some waits to 5s to hopefully prevent a rare thread lock
This commit is contained in:
RaidMax
2018-05-14 12:55:10 -05:00
parent e817c333a5
commit e695eb54ad
30 changed files with 184 additions and 132 deletions

View File

@ -27,9 +27,9 @@
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.4.0" />
</ItemGroup>
<PropertyGroup>
<!--<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
</PropertyGroup>-->
<ItemGroup>
<ProjectReference Include="..\SharedLibraryCore\SharedLibraryCore.csproj">

View File

@ -82,14 +82,17 @@ namespace IW4MAdmin.Application.EventParsers
if (cleanedEventLine[0] == 'D')
{
return new GameEvent()
if (Regex.Match(cleanedEventLine, @"^(D);((?:bot[0-9]+)|(?:[A-Z]|[0-9])+);([0-9]+);(axis|allies);(.+);((?:[A-Z]|[0-9])+);([0-9]+);(axis|allies);(.+);((?:[0-9]+|[a-z]+|_)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$").Success)
{
Type = GameEvent.EventType.Damage,
Data = Regex.Replace(logLine, @"[0-9]+:[0-9]+\ ", "").Trim(),
Origin = server.GetPlayersAsList().First(c => c.NetworkId == lineSplit[5].ConvertLong()),
Target = server.GetPlayersAsList().First(c => c.NetworkId == lineSplit[1].ConvertLong()),
Owner = server
};
return new GameEvent()
{
Type = GameEvent.EventType.Damage,
Data = cleanedEventLine,
Origin = server.GetPlayersAsList().First(c => c.NetworkId == lineSplit[5].ConvertLong()),
Target = server.GetPlayersAsList().First(c => c.NetworkId == lineSplit[1].ConvertLong()),
Owner = server
};
}
}
if (cleanedEventLine.Contains("ExitLevel"))

View File

@ -49,8 +49,11 @@ namespace IW4MAdmin.Application.IO
events.Add(Parser.GetEvent(server, eventLine));
}
catch (Exception)
catch (Exception e)
{
Program.ServerManager.GetLogger().WriteWarning("Could not properly parse event line");
Program.ServerManager.GetLogger().WriteDebug(e.Message);
Program.ServerManager.GetLogger().WriteDebug(eventLine);
}
}
}

View File

@ -137,7 +137,7 @@ namespace IW4MAdmin.Application
};
ServerManager.GetEventHandler().AddEvent(E);
E.OnProcessed.Wait();
E.OnProcessed.Wait(5000);
}
Console.Write('>');
@ -155,6 +155,7 @@ namespace IW4MAdmin.Application
Console.WriteLine($"Exception: {e.Message}");
Console.WriteLine(loc["MANAGER_EXIT"]);
Console.ReadKey();
return;
}
if (ServerManager.GetApplicationSettings().Configuration().EnableWebFront)
@ -171,7 +172,7 @@ namespace IW4MAdmin.Application
private static void OnCancelKey(object sender, ConsoleCancelEventArgs e)
{
ServerManager.Stop();
OnShutdownComplete.Wait();
OnShutdownComplete.Wait(5000);
}
static void CheckDirectories()

View File

@ -341,7 +341,7 @@ namespace IW4MAdmin.Application
{
try
{
Heartbeat.Send(this, true).Wait();
Heartbeat.Send(this, true).Wait(5000);
heartbeatState.Connected = true;
}
@ -356,7 +356,7 @@ namespace IW4MAdmin.Application
{
try
{
Heartbeat.Send(this).Wait();
Heartbeat.Send(this).Wait(5000);
}
catch (System.Net.Http.HttpRequestException e)
{

View File

@ -23,7 +23,7 @@ namespace Application.RconParsers
TempBan = "tempbanclient {0} \"{1}\""
};
private static string StatusRegex = @"^( *[0-9]+) +-*([0-9]+) +((?:[A-Z]+|[0-9]+)) +((?:[a-z]|[0-9]){16}|bot[0-9]+|(?:[0-9]+)) +(.{0,20}) +([0-9]+) +(\d+\.\d+\.\d+.\d+\:-*\d{1,5}|0+.0+:-*\d{1,5}|loopback) +(-*[0-9]+) +([0-9]+) *$";
private static string 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]+) *$";
public async Task<string[]> ExecuteCommandAsync(Connection connection, string command)
{

View File

@ -51,7 +51,6 @@ namespace IW4MAdmin
override public async Task<bool> AddPlayer(Player polledPlayer)
{
if ((polledPlayer.Ping == 999 && !polledPlayer.IsBot) ||
polledPlayer.Ping < 1 ||
polledPlayer.ClientNumber < 0)
@ -451,12 +450,16 @@ namespace IW4MAdmin
{
if (E.Type == GameEvent.EventType.Connect)
{
ChatHistory.Add(new ChatInfo()
// this may be a fix for a hard to reproduce null exception error
lock (ChatHistory)
{
Name = E.Origin.Name,
Message = "CONNECTED",
Time = DateTime.UtcNow
});
ChatHistory.Add(new ChatInfo()
{
Name = E.Origin?.Name ?? "ERROR!",
Message = "CONNECTED",
Time = DateTime.UtcNow
});
}
if (E.Origin.Level > Player.Permission.Moderator)
await E.Origin.Tell(string.Format(loc["SERVER_REPORT_COUNT"], E.Owner.Reports.Count));
@ -479,24 +482,35 @@ namespace IW4MAdmin
else if (E.Type == GameEvent.EventType.Disconnect)
{
ChatHistory.Add(new ChatInfo()
// this may be a fix for a hard to reproduce null exception error
lock (ChatHistory)
{
Name = E.Origin.Name,
Message = "DISCONNECTED",
Time = DateTime.UtcNow
});
ChatHistory.Add(new ChatInfo()
{
Name = E.Origin?.Name ?? "ERROR!",
Message = "DISCONNECTED",
Time = DateTime.UtcNow
});
}
}
if (E.Type == GameEvent.EventType.Say && E.Data?.Length >= 2)
if (E.Type == GameEvent.EventType.Say)
{
E.Data = E.Data.StripColors();
ChatHistory.Add(new ChatInfo()
if (E.Data.Length > 0)
{
Name = E.Origin.Name,
Message = E.Data,
Time = DateTime.UtcNow
});
// this may be a fix for a hard to reproduce null exception error
lock (ChatHistory)
{
ChatHistory.Add(new ChatInfo()
{
Name = E.Origin?.Name ?? "ERROR!",
Message = E.Data,
Time = DateTime.UtcNow
});
}
}
}
if (E.Type == GameEvent.EventType.MapChange)
@ -731,7 +745,10 @@ namespace IW4MAdmin
GameName = Utilities.GetGame(version.Value);
if (GameName == Game.IW4)
{
EventParser = new IW4EventParser();
RconParser = new IW4RConParser();
}
else if (GameName == Game.IW5)
EventParser = new IW5EventParser();
else if (GameName == Game.T5M)