internal static void InitCore() { string homeDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); if (!string.IsNullOrEmpty(homeDirectory)) { Directory.SetCurrentDirectory(homeDirectory); // Allow loading configs from source tree if it's a debug build if (Debugging.IsDebugBuild) { // Common structure is bin/(x64/)Debug/ArchiSteamFarm.exe, so we allow up to 4 directories up for (byte i = 0; i < 4; i++) { Directory.SetCurrentDirectory(".."); if (Directory.Exists(SharedInfo.ConfigDirectory)) { break; } } // If config directory doesn't exist after our adjustment, abort all of that if (!Directory.Exists(SharedInfo.ConfigDirectory)) { Directory.SetCurrentDirectory(homeDirectory); } } } Logging.InitLoggers(); }
private static void Init(string[] args) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler; TaskScheduler.UnobservedTaskException += UnobservedTaskExceptionHandler; string homeDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); if (!string.IsNullOrEmpty(homeDirectory)) { Directory.SetCurrentDirectory(homeDirectory); // Allow loading configs from source tree if it's a debug build if (Debugging.IsDebugBuild) { // Common structure is bin/(x64/)Debug/ArchiSteamFarm.exe, so we allow up to 4 directories up for (byte i = 0; i < 4; i++) { Directory.SetCurrentDirectory(".."); if (Directory.Exists(SharedInfo.ConfigDirectory)) { break; } } // If config directory doesn't exist after our adjustment, abort all of that if (!Directory.Exists(SharedInfo.ConfigDirectory)) { Directory.SetCurrentDirectory(homeDirectory); } } } // Parse pre-init args if (args != null) { ParsePreInitArgs(args); } Logging.InitLoggers(); ASF.ArchiLogger.LogGenericInfo("ASF V" + SharedInfo.Version); if (!Runtime.IsRuntimeSupported) { ASF.ArchiLogger.LogGenericError("ASF detected unsupported runtime version, program might NOT run correctly in current environment. You're running it at your own risk!"); Thread.Sleep(10000); } InitServices(); // If debugging is on, we prepare debug directory prior to running if (GlobalConfig.Debug) { if (Directory.Exists(SharedInfo.DebugDirectory)) { Directory.Delete(SharedInfo.DebugDirectory, true); Thread.Sleep(1000); // Dirty workaround giving Windows some time to sync } Directory.CreateDirectory(SharedInfo.DebugDirectory); SteamKit2.DebugLog.AddListener(new Debugging.DebugListener()); SteamKit2.DebugLog.Enabled = true; } // Parse post-init args if (args != null) { ParsePostInitArgs(args); } // If we ran ASF as a client, we're done by now if (Mode == EMode.Client) { Exit(); } // From now on it's server mode if (!Directory.Exists(SharedInfo.ConfigDirectory)) { ASF.ArchiLogger.LogGenericError("Config directory doesn't exist!"); Thread.Sleep(5000); Exit(1); } ASF.CheckForUpdate().Wait(); // Before attempting to connect, initialize our list of CMs Bot.InitializeCMs(GlobalDatabase.CellID, GlobalDatabase.ServerListProvider); foreach (string botName in Directory.EnumerateFiles(SharedInfo.ConfigDirectory, "*.json").Select(Path.GetFileNameWithoutExtension)) { switch (botName) { case SharedInfo.ASF: case "example": case "minimal": continue; } new Bot(botName).Forget(); } if (Bot.Bots.Count == 0) { ASF.ArchiLogger.LogGenericWarning("No bots are defined, did you forget to configure your ASF?"); } ASF.InitFileWatcher(); }
private static async Task InitCore(string[] args) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler; TaskScheduler.UnobservedTaskException += UnobservedTaskExceptionHandler; string homeDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); if (!string.IsNullOrEmpty(homeDirectory)) { Directory.SetCurrentDirectory(homeDirectory); // Allow loading configs from source tree if it's a debug build if (Debugging.IsDebugBuild) { // Common structure is bin/(x64/)Debug/ArchiSteamFarm.exe, so we allow up to 4 directories up for (byte i = 0; i < 4; i++) { Directory.SetCurrentDirectory(".."); if (Directory.Exists(SharedInfo.ConfigDirectory)) { break; } } // If config directory doesn't exist after our adjustment, abort all of that if (!Directory.Exists(SharedInfo.ConfigDirectory)) { Directory.SetCurrentDirectory(homeDirectory); } } } // Parse pre-init args if (args != null) { ParsePreInitArgs(args); } Logging.InitLoggers(); ASF.ArchiLogger.LogGenericInfo("ASF V" + SharedInfo.Version); await InitServices().ConfigureAwait(false); if (!Runtime.IsRuntimeSupported) { ASF.ArchiLogger.LogGenericError(Strings.WarningRuntimeUnsupported); await Task.Delay(10 * 1000).ConfigureAwait(false); } // If debugging is on, we prepare debug directory prior to running if (GlobalConfig.Debug) { if (Directory.Exists(SharedInfo.DebugDirectory)) { try { Directory.Delete(SharedInfo.DebugDirectory, true); await Task.Delay(1000).ConfigureAwait(false); // Dirty workaround giving Windows some time to sync } catch (IOException e) { ASF.ArchiLogger.LogGenericException(e); } } Directory.CreateDirectory(SharedInfo.DebugDirectory); DebugLog.AddListener(new Debugging.DebugListener()); DebugLog.Enabled = true; } // Parse post-init args if (args != null) { await ParsePostInitArgs(args).ConfigureAwait(false); } // If we ran ASF as a client, we're done by now if (Mode.HasFlag(EMode.Client) && !Mode.HasFlag(EMode.Server)) { Exit(); } await ASF.CheckForUpdate().ConfigureAwait(false); await ASF.InitBots().ConfigureAwait(false); ASF.InitFileWatcher(); }