public Program() { _handler += new EventHandler(Handler); SetConsoleCtrlHandler(_handler, true); //if (!Dev) //AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CrashDump.CurrentDomain_UnhandledException); CurrentGameVerson = SteamCMD.GetGameVersion(); Console.Title = WindowTitle; }
// TODO: This isn't very reliable and may break in the future. Also not very fast :( public static long?GetLatestVersion() { var result = SteamCMD.RunRead($"+@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +@sSteamCmdForcePlatformType windows +login anonymous +app_info_print 896660 +quit"); if (!String.IsNullOrWhiteSpace(result)) { Match match = rxBuildID.Match(result); if (match.Success) { if (long.TryParse(match.Groups[1].Value, out long buildid)) { return(buildid); } } } return(null); }
// TODO: Rework this, it's pretty nasty, make async? public static async Task <bool> UpdateValdiate(string path) { MainWindow mw = (Application.Current.MainWindow as MainWindow); if (!String.IsNullOrWhiteSpace(path)) { if (!File.Exists(Path.Combine(path, "valheim_server.exe"))) { var dialogResult = await DialogManager.ShowMessageAsync(mw, "No Server Found!", $"Chosen folder does not appear to have a server installed, would you like to download the server files to:\n\n{path}?", MessageDialogStyle.AffirmativeAndNegative); if (dialogResult == MessageDialogResult.Negative) { return(false); } } var controller = await DialogManager.ShowProgressAsync(mw, "Updating & Validating", "Please wait while SteamCMD updates and validates the files...", false, new MetroDialogSettings { AnimateShow = false, NegativeButtonText = "Ok" }); var result = SteamCMD.Run($"+@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +@sSteamCmdForcePlatformType windows +login anonymous +force_install_dir \"{path}\" +app_update 896660 validate +quit"); controller.Canceled += new EventHandler(async delegate(Object o, EventArgs e) { await controller.CloseAsync(); }); if (result != 0) { controller.SetMessage($"Failed to update... SteamCMD returned code: {result.ToString()}"); controller.SetCancelable(true); } else { controller.SetMessage("SteamCMD successfully updated and validated the files!"); controller.SetProgress(1.0); controller.SetCancelable(true); return(false); } } return(false); }
// this is where stuff goes! private void Run(string[] args) { // This is for args that should be used before IRSE loads string configPath = ExtenderGlobals.GetFilePath(IRSEFileName.NLogConfig); LogManager.Configuration = new XmlLoggingConfiguration(configPath); _useGui = true; if (args.Contains("-nogui")) { _useGui = false; } if (args.Contains("-usedevversion") || Config.Settings.EnableDevelopmentVersion) { Console.WriteLine(string.Format(Program.Localization.Sentences["UseDevVersion"])); } if (args.Contains("-noupdateirse") || !Config.Settings.EnableExtenderAutomaticUpdates) { UpdateManager.EnableAutoUpdates = false; Console.WriteLine(string.Format(Program.Localization.Sentences["NoUpdate"])); Console.WriteLine(); } if (args.Contains("-autorestart") || Config.Settings.AutoRestartsEnable) { UpdateManager.EnableAutoRestarts = true; Console.WriteLine(string.Format("IRSE: (Arg: -autorestart is set) IRSE Will auto restart when it needs to.")); } Console.WriteLine(); Console.ResetColor(); // Run anything that doesn't require the loading of IR references above here //Harmony if (Harmony.DEBUG) { Console.WriteLine("IRSE: Harmony Debug enabled, logging will be in the file 'harmony.log.txt' on your desktop."); } Console.WriteLine("Initializing Harmony Patches..."); Harmony = new Harmony("com.tse.irse"); Harmony.PatchAll(); Console.WriteLine(); m_serverInstance = new ServerInstance(); ThisGameVersion = m_serverInstance.Assembly.GetName().Version.ToString(); Console.ForegroundColor = ConsoleColor.White; Console.Write(string.Format(Program.Localization.Sentences["ForGameVersion"])); Console.ForegroundColor = ConsoleColor.Red; Console.Write(ForGameVersion + "\n"); Console.ForegroundColor = ConsoleColor.White; Console.Write(string.Format(Program.Localization.Sentences["ThisGameVersion"])); Console.ForegroundColor = ConsoleColor.Red; Console.Write(ThisGameVersion + "\n"); Console.ForegroundColor = ConsoleColor.White; Console.Write(string.Format(Program.Localization.Sentences["OnlineGameVersion"])); Console.ForegroundColor = ConsoleColor.Red; Console.Write(SteamCMD.GetGameVersion() + "\n"); Console.ForegroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Yellow; if (new Version(ThisGameVersion) < SteamCMD.GetGameVersion()) { Console.WriteLine(string.Format(Program.Localization.Sentences["NewIRVersion"])); } if (new Version(ForGameVersion) < new Version(ThisGameVersion)) { Console.WriteLine(string.Format(Program.Localization.Sentences["IRNewer"])); } Console.WriteLine(); Console.ResetColor(); ServerInstance.Instance.OnServerStarted += Instance_OnServerStarted; updateManager = new UpdateManager(); // REPO NEEDS TO BE PUBLIC //Build IR's paths so we can use the Localization system Game.Program.InitFileSystems(); Game.Program.InitGameDirectory("InterstellarRift"); Game.Program.CommandLineArgs = new string[1]; m_serverInstance.PluginManager.LoadAllPlugins(); SetupGUI(); Console.ForegroundColor = ConsoleColor.Green; Console.Write("IRSE: Ready for Input, try using "); Console.ForegroundColor = ConsoleColor.Red; Console.Write("help\n\n"); Console.ResetColor(); if (args.Contains("-autostart") || Config.Settings.AutoStartEnable) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(string.Format(Program.Localization.Sentences["AutoStart"])); Console.ResetColor(); StartServer(); } // run only when they change properties to update the non manual section of ServerConfigProperties //new Modules.GameConfig.ServerConfigConverter().BuildAndUpdateConfigProperties(); //console logic for commands ReadConsoleCommands(args); }
private static void Main(string[] args) { SetTitle(); new FolderStructure().Build(); m_config = new Config(); debugMode = m_config.Settings.DebugMode; AppDomain.CurrentDomain.AssemblyResolve += (sender, rArgs) => { Assembly executingAssembly = Assembly.GetExecutingAssembly(); AssemblyName assemblyName = new AssemblyName(rArgs.Name); var pathh = assemblyName.Name + ".dll"; if (assemblyName.CultureInfo != null && assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture) == false) { pathh = String.Format(@"{0}\{1}", assemblyName.CultureInfo, pathh); } // get binaries in plugins String modPath = Path.Combine(FolderStructure.IRSEFolderPath, "plugins"); String[] subDirectories = Directory.GetDirectories(modPath); foreach (String subDirectory in subDirectories) { string path = Path.Combine(Path.GetFullPath(FolderStructure.IRSEFolderPath), "plugins", subDirectory, pathh); if (File.Exists(path)) { return(Assembly.LoadFrom(path)); } // maybe a subfolder? foreach (String subDirectory2 in Directory.GetDirectories(subDirectory)) { string path2 = Path.Combine(Path.GetFullPath(FolderStructure.IRSEFolderPath), "plugins", subDirectory2, "bin", pathh); if (File.Exists(path2)) { return(Assembly.LoadFrom(path2)); } } } using (Stream stream = executingAssembly.GetManifestResourceStream(pathh)) { if (stream == null) { return(null); } var assemblyRawBytes = new byte[stream.Length]; stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length); //Console.WriteLine("found missing dll: " + pathh); return(Assembly.Load(assemblyRawBytes)); } }; string configPath = ExtenderGlobals.GetFilePath(IRSEFileName.NLogConfig); LogManager.Configuration = new XmlLoggingConfiguration(configPath); Console.WriteLine($"Interstellar Rift Extended Server v{Version} Initializing...."); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine($"Git Branch: {ThisAssembly.Git.Branch}"); if (Dev) { Console.WriteLine($"Git Commit: {ThisAssembly.Git.Commit}"); Console.WriteLine($"Git SHA: {ThisAssembly.Git.Sha}"); } Console.WriteLine(); // This is for args that should be used before IRSE loads bool noUpdateIRSE = false; bool noUpdateIR = false; bool usePrereleaseVersions = false; Console.ForegroundColor = ConsoleColor.Green; foreach (string arg in args) { if (arg.Equals("-noupdateirse")) { noUpdateIRSE = true; } if (arg.Equals("-noupdateir")) { noUpdateIR = true; } if (arg.Equals("-usedevversion")) { usePrereleaseVersions = true; } } if (usePrereleaseVersions || Config.Settings.EnableDevelopmentVersion) { Console.WriteLine("IRSE: (Arg: -usedevversion is set) IRSE Will use Pre-releases versions"); } if (noUpdateIRSE || !Config.Settings.EnableExtenderAutomaticUpdates) { UpdateManager.EnableAutoUpdates = false; Console.WriteLine("IRSE: (Arg: -noupdate is set or option in IRSE config is enabled) IRSE will not be auto-updated."); } if (noUpdateIR || !Config.Settings.EnableAutomaticUpdates) { SteamCMD.AutoUpdateIR = false; Console.WriteLine("IRSE: (Arg: -noupdateir is set) IsR Dedicated Serevr will not be auto-updated."); } Console.WriteLine(); Console.ResetColor(); //new SteamCMD().GetSteamCMD(); // Run anything that doesn't require the loading of IR references above here if (!File.Exists(Path.Combine(FolderStructure.RootFolderPath, "IR.exe"))) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("IRSE: IR.EXE wasn't found."); Console.WriteLine("Make sure IRSE.exe is in the same folder as IR.exe."); Console.WriteLine("Press enter to close."); Console.ReadLine(); Environment.Exit(0); } m_serverInstance = new ServerInstance(); ThisGameVersion = m_serverInstance.Assembly.GetName().Version.ToString(); Console.ForegroundColor = ConsoleColor.White; Console.Write("For Game Version: "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(ForGameVersion + "\n"); Console.ForegroundColor = ConsoleColor.White; Console.Write("This Game Version: "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(ThisGameVersion + "\n"); Console.ForegroundColor = ConsoleColor.White; Console.Write("Online Game Version: "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(SteamCMD.GetGameVersion() + "\n"); Console.ForegroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Yellow; if (new Version(ThisGameVersion) < SteamCMD.GetGameVersion()) { Console.WriteLine("There is a new version of Interstellar Rift! Update your IR Installation!"); } if (new Version(ForGameVersion) < new Version(ThisGameVersion)) { Console.WriteLine("Interstellar Rifts Version is newer than what this version of IRSE Supports, Check for IRSE updates!"); } Console.WriteLine(); Console.ResetColor(); updateManager = new UpdateManager(); // REPO NEEDS TO BE PUBLIC Instance = new Program(); Instance.Run(args); }