diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 37dcfae4a..d2714ef0b 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -223,7 +223,7 @@ namespace ArchiSteamFarm { HeartBeatTimer = new Timer( async e => await HeartBeat().ConfigureAwait(false), null, - TimeSpan.FromMinutes(1) + TimeSpan.FromMinutes(0.2 * Bots.Count), // Delay + TimeSpan.FromMinutes(1) + TimeSpan.FromSeconds(Program.LoadBalancingDelay * Bots.Count), // Delay TimeSpan.FromMinutes(1) // Period ); } @@ -1128,7 +1128,7 @@ namespace ArchiSteamFarm { SendItemsTimer = new Timer( async e => await ResponseLoot(steamMasterID).ConfigureAwait(false), null, - TimeSpan.FromHours(BotConfig.SendTradePeriod) + TimeSpan.FromMinutes(Bots.Count), // Delay + TimeSpan.FromHours(BotConfig.SendTradePeriod) + TimeSpan.FromSeconds(Program.LoadBalancingDelay * Bots.Count), // Delay TimeSpan.FromHours(BotConfig.SendTradePeriod) // Period ); } diff --git a/ArchiSteamFarm/CardsFarmer.cs b/ArchiSteamFarm/CardsFarmer.cs index 641943f8a..a41ed4cb5 100755 --- a/ArchiSteamFarm/CardsFarmer.cs +++ b/ArchiSteamFarm/CardsFarmer.cs @@ -77,7 +77,7 @@ namespace ArchiSteamFarm { IdleFarmingTimer = new Timer( async e => await CheckGamesForFarming().ConfigureAwait(false), null, - TimeSpan.FromHours(Program.GlobalConfig.IdleFarmingPeriod) + TimeSpan.FromMinutes(0.5 * Bot.Bots.Count), // Delay + TimeSpan.FromHours(Program.GlobalConfig.IdleFarmingPeriod) + TimeSpan.FromSeconds(Program.LoadBalancingDelay * Bot.Bots.Count), // Delay TimeSpan.FromHours(Program.GlobalConfig.IdleFarmingPeriod) // Period ); } diff --git a/ArchiSteamFarm/GlobalConfig.cs b/ArchiSteamFarm/GlobalConfig.cs index 65d0a63c4..cff53bdcb 100644 --- a/ArchiSteamFarm/GlobalConfig.cs +++ b/ArchiSteamFarm/GlobalConfig.cs @@ -36,6 +36,7 @@ namespace ArchiSteamFarm { [SuppressMessage("ReSharper", "ConvertToConstant.Global")] internal sealed class GlobalConfig { internal const byte DefaultConnectionTimeout = 60; + internal const byte DefaultLoginLimiterDelay = 10; internal const ushort DefaultWCFPort = 1242; // This is hardcoded blacklist which should not be possible to change @@ -82,7 +83,7 @@ namespace ArchiSteamFarm { internal readonly byte InventoryLimiterDelay = 3; [JsonProperty(Required = Required.DisallowNull)] - internal readonly byte LoginLimiterDelay = 10; + internal readonly byte LoginLimiterDelay = DefaultLoginLimiterDelay; [JsonProperty(Required = Required.DisallowNull)] internal readonly byte MaxFarmingTime = 10; diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index 5b94a4779..3fa654a98 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -42,6 +42,14 @@ using SteamKit2; namespace ArchiSteamFarm { internal static class Program { internal static bool IsWCFRunning => WCF.IsServerRunning; + + internal static byte LoadBalancingDelay { + get { + byte result = GlobalConfig?.LoginLimiterDelay ?? GlobalConfig.DefaultLoginLimiterDelay; + return result < GlobalConfig.DefaultLoginLimiterDelay ? GlobalConfig.DefaultLoginLimiterDelay : result; + } + } + internal static GlobalConfig GlobalConfig { get; private set; } internal static GlobalDatabase GlobalDatabase { get; private set; } internal static bool IsRunningAsService { get; private set; } diff --git a/ArchiSteamFarm/SteamSaleEvent.cs b/ArchiSteamFarm/SteamSaleEvent.cs index 70121a5cb..9ec9539b7 100644 --- a/ArchiSteamFarm/SteamSaleEvent.cs +++ b/ArchiSteamFarm/SteamSaleEvent.cs @@ -42,7 +42,7 @@ namespace ArchiSteamFarm { SteamDiscoveryQueueTimer = new Timer( async e => await ExploreDiscoveryQueue().ConfigureAwait(false), null, - TimeSpan.FromMinutes(1 + 0.2 * Bot.Bots.Count), // Delay + TimeSpan.FromMinutes(1) + TimeSpan.FromSeconds(Program.LoadBalancingDelay * Bot.Bots.Count), // Delay TimeSpan.FromHours(6.1) // Period ); } diff --git a/GUI/Program.cs b/GUI/Program.cs index 712a52237..3d27dcd5f 100644 --- a/GUI/Program.cs +++ b/GUI/Program.cs @@ -14,6 +14,13 @@ using SteamKit2; namespace ArchiSteamFarm { internal static class Program { + internal static byte LoadBalancingDelay { + get { + byte result = GlobalConfig?.LoginLimiterDelay ?? GlobalConfig.DefaultLoginLimiterDelay; + return result < GlobalConfig.DefaultLoginLimiterDelay ? GlobalConfig.DefaultLoginLimiterDelay : result; + } + } + internal static GlobalConfig GlobalConfig { get; private set; } internal static GlobalDatabase GlobalDatabase { get; private set; } internal static WebBrowser WebBrowser { get; private set; }