From 00bade57a765776b065a4c3c64a516615b3b9a32 Mon Sep 17 00:00:00 2001 From: RaidMax Date: Tue, 8 Aug 2017 23:35:23 -0500 Subject: [PATCH] fixed some async startup stuff and made things nicer --- Admin/Manager.cs | 92 +++++++++-------- Admin/Server.cs | 14 ++- Admin/lib/SharedLibrary.dll | Bin 96768 -> 104960 bytes Admin/version.txt | 1 + IW4MAdmin.sln | 96 +++++++++--------- SharedLibrary/Helpers/ConfigurationManager.cs | 5 +- SharedLibrary/RCON.cs | 24 ++++- SharedLibrary/Server.cs | 1 + 8 files changed, 135 insertions(+), 98 deletions(-) diff --git a/Admin/Manager.cs b/Admin/Manager.cs index ac9b46711..13f40b20d 100644 --- a/Admin/Manager.cs +++ b/Admin/Manager.cs @@ -64,43 +64,6 @@ namespace IW4MAdmin public void Init() { - #region CONFIG - var Configs = Directory.EnumerateFiles("config/servers").Where(x => x.Contains(".cfg")); - - if (Configs.Count() == 0) - ServerConfigurationGenerator.Generate(); - - foreach (var file in Configs) - { - var Conf = ServerConfiguration.Read(file); - var ServerInstance = new IW4MServer(this, Conf); - - Task.Run(async () => - { - try - { - await ServerInstance.Initialize(); - Servers.Add(ServerInstance); - - // this way we can keep track of execution time and see if problems arise. - var Status = new AsyncStatus(ServerInstance, UPDATE_FREQUENCY); - TaskStatuses.Add(Status); - - Logger.WriteVerbose($"Now monitoring {ServerInstance.Hostname}"); - } - - catch (ServerException e) - { - Logger.WriteWarning($"Not monitoring server {Conf.IP}:{Conf.Port} due to uncorrectable errors"); - if (e.GetType() == typeof(DvarException)) - Logger.WriteError($"Could not get the dvar value for {(e as DvarException).Data["dvar_name"]} (ensure the server has a map loaded)"); - else if (e.GetType() == typeof(NetworkException)) - Logger.WriteError(e.Message); - } - }); - } - #endregion - #region PLUGINS SharedLibrary.Plugins.PluginImporter.Load(this); @@ -120,6 +83,50 @@ namespace IW4MAdmin } #endregion + #region CONFIG + var Configs = Directory.EnumerateFiles("config/servers").Where(x => x.Contains(".cfg")); + + if (Configs.Count() == 0) + ServerConfigurationGenerator.Generate(); + + foreach (var file in Configs) + { + var Conf = ServerConfiguration.Read(file); + + Task.Run(async () => + { + try + { + var ServerInstance = new IW4MServer(this, Conf); + await ServerInstance.Initialize(); + + lock (Servers) + { + Servers.Add(ServerInstance); + } + + Logger.WriteVerbose($"Now monitoring {ServerInstance.Hostname}"); + + // this way we can keep track of execution time and see if problems arise. + var Status = new AsyncStatus(ServerInstance, UPDATE_FREQUENCY); + lock (TaskStatuses) + { + TaskStatuses.Add(Status); + } + } + + catch (ServerException e) + { + Logger.WriteWarning($"Not monitoring server {Conf.IP}:{Conf.Port} due to uncorrectable errors"); + if (e.GetType() == typeof(DvarException)) + Logger.WriteError($"Could not get the dvar value for {(e as DvarException).Data["dvar_name"]} (ensure the server has a map loaded)"); + else if (e.GetType() == typeof(NetworkException)) + Logger.WriteError(e.Message); + } + }); + } + #endregion + #region COMMANDS if ((ClientDatabase as ClientsDB).GetOwner() == null) Commands.Add(new COwner("owner", "claim ownership of the server", "owner", Player.Permission.User, 0, false)); @@ -173,22 +180,23 @@ namespace IW4MAdmin Running = true; } - + public void Start() { while (Running) { - foreach (var Status in TaskStatuses) + for (int i = 0; i < TaskStatuses.Count; i++) { + var Status = TaskStatuses[i]; if (Status.RequestedTask == null || Status.RequestedTask.IsCompleted) { Status.Update(new Task(() => (Status.Dependant as Server).ProcessUpdatesAsync(Status.GetToken()))); - if (Status.RunAverage > 500) + if (Status.RunAverage > 1000) Logger.WriteWarning($"Update task average execution is longer than desired for {(Status.Dependant as Server).GetIP()}::{(Status.Dependant as Server).GetPort()} [{Status.RunAverage}ms]"); } } - Thread.Sleep(UPDATE_FREQUENCY); + Thread.Sleep(300); } #if !DEBUG foreach (var S in Servers) @@ -199,7 +207,7 @@ namespace IW4MAdmin webServiceTask.Stop(); } - + public void Stop() { Running = false; diff --git a/Admin/Server.cs b/Admin/Server.cs index 9300c186c..5252fabb7 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -293,6 +293,9 @@ namespace IW4MAdmin public override async Task ExecuteEvent(Event E) { + if (Throttled) + return; + await ProcessEvent(E); foreach (IPlugin P in SharedLibrary.Plugins.PluginImporter.ActivePlugins) @@ -341,15 +344,18 @@ namespace IW4MAdmin #endif { - if ((DateTime.Now - LastPoll).TotalMinutes < 5 && ConnectionErrors > 1) + if ((DateTime.Now - LastPoll).TotalMinutes < 2 && ConnectionErrors >= 1) return; try { await PollPlayersAsync(); - + if (ConnectionErrors > 0) + { Logger.WriteInfo($"Connection has been reestablished with {IP}:{Port}"); + Throttled = false; + } ConnectionErrors = 0; LastPoll = DateTime.Now; } @@ -358,7 +364,11 @@ namespace IW4MAdmin { ConnectionErrors++; if (ConnectionErrors == 1) + { Logger.WriteError($"{e.Message} {IP}:{Port}, reducing polling rate"); + Throttled = true; + } + return; } LastMessage = DateTime.Now - start; diff --git a/Admin/lib/SharedLibrary.dll b/Admin/lib/SharedLibrary.dll index 2543338037e992738f6d3a5e1873bd00268fa291..8d35f98251b1e1dc868c2cce4c61181ac48f832a 100644 GIT binary patch literal 104960 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%0AIw+RzXZ)0XN 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%0DWKL8%evv;;DF~GzIn%S%zG~k) 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�OGBv-0${fK)kU9|15kH69oPu_=lZgKpS_rMSy=B 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 diff --git a/Admin/version.txt b/Admin/version.txt index 166c109e7..7fb917051 100644 --- a/Admin/version.txt +++ b/Admin/version.txt @@ -4,6 +4,7 @@ CHANGELOG: -fixed the issue with webfront chat history -fixed console issue of spamming 'polling rate decreased' when server goes offline -'unknown' admin in webfront defaults to 'IW4MAdmin' +-streamlined the async server initialization VERSION 1.3 diff --git a/IW4MAdmin.sln b/IW4MAdmin.sln index cd072ce42..bfabd753c 100644 --- a/IW4MAdmin.sln +++ b/IW4MAdmin.sln @@ -60,128 +60,128 @@ Global {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Mixed Platforms.Build.0 = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x64.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x64.Build.0 = Release|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x86.Build.0 = Release-Stable|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x86.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x86.Build.0 = Debug|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.Build.0 = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Mixed Platforms.Build.0 = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x64.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x64.Build.0 = Release|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x86.Build.0 = Release-Stable|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x86.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x86.Build.0 = Debug|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Any CPU.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Any CPU.Build.0 = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Mixed Platforms.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Mixed Platforms.Build.0 = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x64.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x64.Build.0 = Release|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x86.Build.0 = Debug|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Any CPU.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Any CPU.Build.0 = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Mixed Platforms.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Mixed Platforms.Build.0 = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x64.ActiveCfg = Release|Any CPU {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x64.Build.0 = Release|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x86.Build.0 = Debug|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Any CPU.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Any CPU.Build.0 = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Mixed Platforms.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Mixed Platforms.Build.0 = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x64.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x64.Build.0 = Release|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x86.Build.0 = Release-Stable|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x86.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x86.Build.0 = Debug|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Any CPU.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Any CPU.Build.0 = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Mixed Platforms.Build.0 = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x64.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x64.Build.0 = Release|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x86.Build.0 = Release-Stable|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x86.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x86.Build.0 = Debug|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Any CPU.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Any CPU.Build.0 = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Mixed Platforms.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Mixed Platforms.Build.0 = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x64.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x64.Build.0 = Release|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x86.Build.0 = Debug|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Any CPU.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Any CPU.Build.0 = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Mixed Platforms.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Mixed Platforms.Build.0 = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x64.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x64.Build.0 = Release|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x86.Build.0 = Debug|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Any CPU.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Any CPU.Build.0 = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Mixed Platforms.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Mixed Platforms.Build.0 = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x64.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x64.Build.0 = Release|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x86.Build.0 = Release-Stable|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x86.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x86.Build.0 = Debug|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Any CPU.Build.0 = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Mixed Platforms.Build.0 = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x64.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x64.Build.0 = Release|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x86.Build.0 = Release-Stable|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x86.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x86.Build.0 = Debug|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Any CPU.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Any CPU.Build.0 = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Mixed Platforms.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Mixed Platforms.Build.0 = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x64.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x64.Build.0 = Release|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x86.Build.0 = Debug|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Any CPU.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Any CPU.Build.0 = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Mixed Platforms.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Mixed Platforms.Build.0 = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x64.ActiveCfg = Release|Any CPU {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x64.Build.0 = Release|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x86.Build.0 = Debug|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Any CPU.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Any CPU.Build.0 = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Mixed Platforms.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Mixed Platforms.Build.0 = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x64.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x64.Build.0 = Release|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x86.Build.0 = Release-Stable|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x86.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x86.Build.0 = Debug|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Any CPU.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Any CPU.Build.0 = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Mixed Platforms.Build.0 = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x64.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x64.Build.0 = Release|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x86.Build.0 = Release-Stable|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x86.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x86.Build.0 = Debug|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Any CPU.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Any CPU.Build.0 = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Mixed Platforms.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Mixed Platforms.Build.0 = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x64.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x64.Build.0 = Release|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x86.Build.0 = Debug|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Any CPU.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Any CPU.Build.0 = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Mixed Platforms.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Mixed Platforms.Build.0 = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x64.ActiveCfg = Release|Any CPU {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x64.Build.0 = Release|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x86.Build.0 = Debug|Any CPU {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Any CPU.ActiveCfg = Release|Any CPU {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Any CPU.Build.0 = Release|Any CPU {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -217,55 +217,55 @@ Global {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|Any CPU.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|x64.ActiveCfg = Release-Stable|Any CPU - {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|x86.Build.0 = Release-Stable|Any CPU + {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|x86.ActiveCfg = Debug|Any CPU + {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|x86.Build.0 = Debug|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release|Any CPU.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release|x64.ActiveCfg = Release-Stable|Any CPU - {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release|x86.Build.0 = Release-Stable|Any CPU + {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release|x86.ActiveCfg = Debug|Any CPU + {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release|x86.Build.0 = Debug|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Nightly|Any CPU.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Nightly|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Nightly|x64.ActiveCfg = Release-Stable|Any CPU - {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU + {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Nightly|x86.Build.0 = Debug|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|Any CPU.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU - {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU + {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x86.Build.0 = Debug|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Any CPU.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Any CPU.Build.0 = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Mixed Platforms.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Mixed Platforms.Build.0 = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x64.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x64.Build.0 = Release|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.Build.0 = Release-Stable|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.Build.0 = Debug|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Any CPU.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Any CPU.Build.0 = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Mixed Platforms.Build.0 = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x64.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x64.Build.0 = Release|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.Build.0 = Release-Stable|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.Build.0 = Debug|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Any CPU.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Any CPU.Build.0 = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Mixed Platforms.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Mixed Platforms.Build.0 = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x64.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x64.Build.0 = Release|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.Build.0 = Debug|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Any CPU.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Any CPU.Build.0 = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Mixed Platforms.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Mixed Platforms.Build.0 = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x64.ActiveCfg = Release|Any CPU {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x64.Build.0 = Release|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.Build.0 = Debug|Any CPU {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.ActiveCfg = Release|Any CPU {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.Build.0 = Release|Any CPU {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Mixed Platforms.ActiveCfg = Release|Any CPU diff --git a/SharedLibrary/Helpers/ConfigurationManager.cs b/SharedLibrary/Helpers/ConfigurationManager.cs index ae8b9eb02..60c1500d8 100644 --- a/SharedLibrary/Helpers/ConfigurationManager.cs +++ b/SharedLibrary/Helpers/ConfigurationManager.cs @@ -19,7 +19,10 @@ namespace SharedLibrary.Helpers try { var Config = Interfaces.Serialize>.Read($"config/{PluginType.ToString()}_{S.ToString()}.cfg"); - ConfigurationSet.Add(S.ToString(), Config); + lock (ConfigurationSet) + { + ConfigurationSet.Add(S.ToString(), Config); + } } catch (Exceptions.SerializeException) diff --git a/SharedLibrary/RCON.cs b/SharedLibrary/RCON.cs index e46cdfbfb..9da080949 100644 --- a/SharedLibrary/RCON.cs +++ b/SharedLibrary/RCON.cs @@ -22,9 +22,12 @@ namespace SharedLibrary.Network static string[] SendQuery(QueryType Type, Server QueryServer, string Parameters = "") { + if (QueryServer.Throttled) + throw new Exceptions.DvarException("Server is RCON throttled"); + var ServerOOBConnection = new UdpClient(); - ServerOOBConnection.Client.SendTimeout = 3000; - ServerOOBConnection.Client.ReceiveTimeout = 3000; + ServerOOBConnection.Client.SendTimeout = 1000; + ServerOOBConnection.Client.ReceiveTimeout = 1000; var Endpoint = new IPEndPoint(IPAddress.Parse(QueryServer.GetIP()), QueryServer.GetPort()); string QueryString = String.Empty; @@ -81,7 +84,7 @@ namespace SharedLibrary.Network attempts++; if (attempts > 5) { - var e = new Exceptions.NetworkException("Could not communicate with the server (ensure the configuration is correct)"); + var e = new Exceptions.NetworkException("Could not communicate with the server"); e.Data["server_address"] = ServerOOBConnection.Client.RemoteEndPoint.ToString(); ServerOOBConnection.Close(); throw e; @@ -93,7 +96,10 @@ namespace SharedLibrary.Network } public static async Task> GetDvarAsync(this Server server, string dvarName) - { + { + if (server.Throttled) + throw new Exceptions.DvarException("Server is RCON throttled"); + string[] LineSplit = await Task.FromResult(SendQuery(QueryType.DVAR, server, dvarName)); if (LineSplit.Length != 3) @@ -121,21 +127,29 @@ namespace SharedLibrary.Network public static async Task SetDvarAsync(this Server server, string dvarName, object dvarValue) { + if (server.Throttled) + throw new Exceptions.DvarException("Server is RCON throttled"); + await Task.FromResult(SendQuery(QueryType.DVAR, server, $"set {dvarName} {dvarValue}")); } public static async Task ExecuteCommandAsync(this Server server, string commandName) { + if (server.Throttled) + throw new Exceptions.DvarException("Server is RCON throttled"); + return await Task.FromResult(SendQuery(QueryType.COMMAND, server, commandName).Skip(1).ToArray()); } public static async Task> GetStatusAsync(this Server server) { + if (server.Throttled) + throw new Exceptions.DvarException("Server is RCON throttled"); + string[] response = await Task.FromResult(SendQuery(QueryType.DVAR, server, "status")); return Utilities.PlayersFromStatus(response); } - static byte[] GetRequestBytes(string Request) { Byte[] initialRequestBytes = Encoding.Unicode.GetBytes(Request); diff --git a/SharedLibrary/Server.cs b/SharedLibrary/Server.cs index 7a9795cb7..6781629eb 100644 --- a/SharedLibrary/Server.cs +++ b/SharedLibrary/Server.cs @@ -370,6 +370,7 @@ namespace SharedLibrary public int MaxClients { get; protected set; } public List Players { get; protected set; } public string Password { get; private set; } + public bool Throttled { get; protected set; } // Internal protected string IP;