using System; using System.Threading.Tasks; using System.IO; using System.Reflection; using SharedLibraryCore; using SharedLibraryCore.Objects; using SharedLibraryCore.Database; namespace IW4MAdmin.Application { public class Program { static public double Version { get; private set; } static public ApplicationManager ServerManager = ApplicationManager.GetInstance(); public static string OperatingDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + Path.DirectorySeparatorChar; public static void Main(string[] args) { AppDomain.CurrentDomain.SetData("DataDirectory", OperatingDirectory); System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.BelowNormal; Version = Assembly.GetExecutingAssembly().GetName().Version.Major + Assembly.GetExecutingAssembly().GetName().Version.Minor / 10.0f; Console.WriteLine("====================================================="); Console.WriteLine(" IW4M ADMIN"); Console.WriteLine(" by RaidMax "); Console.WriteLine($" Version {Version.ToString("0.0")}"); Console.WriteLine("====================================================="); try { using (var db = new DatabaseContext()) new ContextSeed(db).Seed().Wait(); CheckDirectories(); ServerManager = ApplicationManager.GetInstance(); var api = API.Master.Endpoint.Get(); var version = new API.Master.VersionInfo() { CurrentVersionStable = 99.99f }; try { version = api.GetVersion().Result; } catch (Exception e) { ServerManager.Logger.WriteWarning($"Could not get latest IW4MAdmin version"); while (e.InnerException != null) { e = e.InnerException; } ServerManager.Logger.WriteDebug(e.Message); } if (version.CurrentVersionStable == 99.99f) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Could not get latest IW4MAdmin version."); Console.ForegroundColor = ConsoleColor.White; } #if !PRERELEASE else if (version.CurrentVersionStable > Version) { Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine($"IW4MAdmin has an update. Latest version is [v{version.CurrentVersionStable.ToString("0.0")}]"); Console.WriteLine($"Your version is [v{Version.ToString("0.0")}]"); Console.ForegroundColor = ConsoleColor.White; } #else else if (version.CurrentVersionPrerelease > Version) { Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine($"IW4MAdmin-Prerelease has an update. Latest version is [v{version.CurrentVersionPrerelease.ToString("0.0")}-pr]"); Console.WriteLine($"Your version is [v{Version.ToString("0.0")}-pr]"); Console.ForegroundColor = ConsoleColor.White; } #endif else { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("IW4MAdmin is up to date."); Console.ForegroundColor = ConsoleColor.White; } ServerManager.Init().Wait(); var consoleTask = Task.Run(() => { String userInput; Player Origin = ServerManager.GetClientService().Get(1).Result.AsPlayer(); do { userInput = Console.ReadLine(); if (userInput?.ToLower() == "quit") ServerManager.Stop(); if (ServerManager.Servers.Count == 0) { Console.WriteLine("No servers are currently being monitored"); continue; } Origin.CurrentServer = ServerManager.Servers[0]; GameEvent E = new GameEvent(GameEvent.EventType.Say, userInput, Origin, null, ServerManager.Servers[0]); ServerManager.Servers[0].ExecuteEvent(E); Console.Write('>'); } while (ServerManager.Running); }); if (ServerManager.GetApplicationSettings().Configuration().EnableWebFront) { Task.Run(() => WebfrontCore.Program.Init(ServerManager)); } ServerManager.Start(); ServerManager.Logger.WriteVerbose("Shutdown complete"); } catch (Exception e) { Console.WriteLine($"Fatal Error during initialization"); while (e.InnerException != null) { e = e.InnerException; } Console.WriteLine($"Exception: {e.Message}"); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } static void CheckDirectories() { string curDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + Path.DirectorySeparatorChar; if (!Directory.Exists($"{curDirectory}Plugins")) Directory.CreateDirectory($"{curDirectory}Plugins"); } } }