From b17960096ef3c6691ec4693f3dca721303c102b4 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Wed, 16 Dec 2015 01:17:54 +0100 Subject: [PATCH] Internal improvements --- ArchiSteamFarm/Bot.cs | 38 +++++++++++++++++++++++++---------- ArchiSteamFarm/CardsFarmer.cs | 18 ++++++++++++++++- ArchiSteamFarm/Logging.cs | 6 ++++-- ArchiSteamFarm/Program.cs | 7 ++++++- 4 files changed, 54 insertions(+), 15 deletions(-) diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index abdf4c9b4..31f5b44d5 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -45,6 +45,7 @@ namespace ArchiSteamFarm { private bool LoggedInElsewhere = false; private bool IsRunning = false; + private bool IsBeingUsedAsPrimaryAccount = false; private string AuthCode, LoginKey, TwoFactorAuth; internal ArchiHandler ArchiHandler { get; private set; } @@ -541,16 +542,28 @@ namespace ArchiSteamFarm { SteamPassword = Program.GetUserInput(BotName, Program.EUserInputType.Password); } - // TODO: We should use SteamUser.LogOn with proper LoginID once https://github.com/SteamRE/SteamKit/pull/217 gets merged - ArchiHandler.HackedLogOn(0xBAADF00D, new SteamUser.LogOnDetails { - Username = SteamLogin, - Password = SteamPassword, - AuthCode = AuthCode, - LoginKey = LoginKey, - TwoFactorCode = TwoFactorAuth, - SentryFileHash = sentryHash, - ShouldRememberPassword = true - }); + if (!IsBeingUsedAsPrimaryAccount) { + SteamUser.LogOn(new SteamUser.LogOnDetails { + Username = SteamLogin, + Password = SteamPassword, + AuthCode = AuthCode, + LoginKey = LoginKey, + TwoFactorCode = TwoFactorAuth, + SentryFileHash = sentryHash, + ShouldRememberPassword = true + }); + } else { + // TODO: We should use SteamUser.LogOn with proper LoginID once https://github.com/SteamRE/SteamKit/pull/217 gets merged + ArchiHandler.HackedLogOn(0xBAADF00D, new SteamUser.LogOnDetails { + Username = SteamLogin, + Password = SteamPassword, + AuthCode = AuthCode, + LoginKey = LoginKey, + TwoFactorCode = TwoFactorAuth, + SentryFileHash = sentryHash, + ShouldRememberPassword = true + }); + } } private async void OnDisconnected(SteamClient.DisconnectedCallback callback) { @@ -705,9 +718,12 @@ namespace ArchiSteamFarm { Logging.LogGenericInfo(BotName, "Logged off of Steam: " + callback.Result); switch (callback.Result) { + case EResult.LogonSessionReplaced: + Logging.LogGenericInfo(BotName, "This is primary account, changing logic alt -> main"); + IsBeingUsedAsPrimaryAccount = true; + break; case EResult.AlreadyLoggedInElsewhere: case EResult.LoggedInElsewhere: - case EResult.LogonSessionReplaced: LoggedInElsewhere = true; break; } diff --git a/ArchiSteamFarm/CardsFarmer.cs b/ArchiSteamFarm/CardsFarmer.cs index 3fe6a8c74..7edb23264 100755 --- a/ArchiSteamFarm/CardsFarmer.cs +++ b/ArchiSteamFarm/CardsFarmer.cs @@ -143,6 +143,22 @@ namespace ArchiSteamFarm { return; } + // Check if farming is possible + Logging.LogGenericInfo(Bot.BotName, "Checking possibility to farm..."); + NowFarming = true; + Semaphore.Release(); + Bot.ArchiHandler.PlayGames(1337); + + // We'll now either receive OnLoggedOff() with LoggedInElsewhere, or nothing happens + if (await Task.Run(() => FarmResetEvent.WaitOne(5000)).ConfigureAwait(false)) { // If LoggedInElsewhere happens in 5 seconds from now, abort farming + NowFarming = false; + return; + } + + Logging.LogGenericInfo(Bot.BotName, "Farming is possible!"); + + await Semaphore.WaitAsync().ConfigureAwait(false); + Logging.LogGenericInfo(Bot.BotName, "Checking badges..."); // Find the number of badge pages @@ -299,7 +315,7 @@ namespace ArchiSteamFarm { } private async Task CheckGamesForFarming() { - if (NowFarming || CurrentGamesFarming.Count > 0 || GamesToFarm.Count > 0) { + if (NowFarming || GamesToFarm.Count > 0) { return; } diff --git a/ArchiSteamFarm/Logging.cs b/ArchiSteamFarm/Logging.cs index a3eaa397a..6e33168d8 100644 --- a/ArchiSteamFarm/Logging.cs +++ b/ArchiSteamFarm/Logging.cs @@ -29,9 +29,11 @@ using System.Runtime.CompilerServices; namespace ArchiSteamFarm { internal static class Logging { private static void Log(string message) { - lock (Program.ConsoleLock) { - Console.WriteLine(DateTime.Now + " " + message); + if (Program.ConsoleIsBusy) { + return; } + + Console.WriteLine(DateTime.Now + " " + message); } internal static void LogGenericError(string botName, string message, [CallerMemberName] string previousMethodName = "") { diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index e9cd5ef1a..33a703068 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -52,10 +52,12 @@ namespace ArchiSteamFarm { private static readonly Assembly Assembly = Assembly.GetExecutingAssembly(); private static readonly string ExecutablePath = Assembly.Location; private static readonly AssemblyName AssemblyName = Assembly.GetName(); + private static readonly object ConsoleLock = new object(); //private static readonly string ExeName = AssemblyName.Name + ".exe"; internal static readonly string Version = AssemblyName.Version.ToString(); - internal static readonly object ConsoleLock = new object(); + + internal static bool ConsoleIsBusy = false; private static async Task CheckForUpdate() { JObject response = await WebBrowser.UrlGetToJObject(LatestGithubReleaseURL).ConfigureAwait(false); @@ -104,6 +106,7 @@ namespace ArchiSteamFarm { internal static string GetUserInput(string botLogin, EUserInputType userInputType, string extraInformation = null) { string result; lock (ConsoleLock) { + ConsoleIsBusy = true; switch (userInputType) { case EUserInputType.Login: Console.Write("<" + botLogin + "> Please enter your login: "); @@ -134,7 +137,9 @@ namespace ArchiSteamFarm { } result = Console.ReadLine(); Console.Clear(); // For security purposes + ConsoleIsBusy = false; } + return result.Trim(); // Get rid of all whitespace characters }