public async Task StartAsync() { xmlConfigurationProvider.LoadFromFile("configs/WorldServer.ini"); Console.BackgroundColor = ConsoleColor.Black; Console.Title = $"{((AssemblyTitleAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), inherit: false)[0]).Title} v{Assembly.GetExecutingAssembly().GetName().Version}"; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("{0}", ((AssemblyProductAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), inherit: false)[0]).Product); Console.WriteLine(((AssemblyCopyrightAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), inherit: false)[0]).Copyright); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(" __ __ _ _ ___ ___ ___ __ __ ___ "); Console.WriteLine(" | \\/ |__ _| \\| |/ __|/ _ \\/ __| \\ \\ / /| _ ) We Love "); Console.WriteLine(" | |\\/| / _` | .` | (_ | (_) \\__ \\ \\ V / | _ \\ Vanilla Wow"); Console.WriteLine(" |_| |_\\__,_|_|\\_|\\___|\\___/|___/ \\_/ |___/ "); Console.WriteLine(" "); Console.WriteLine(" Website / Forum / Support: https://getmangos.eu/ "); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.Magenta; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(((AssemblyTitleAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), inherit: false)[0]).Title); Console.WriteLine(" version {0}", Assembly.GetExecutingAssembly().GetName().Version); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.Gray; DateTime dateTimeStarted = DateAndTime.Now; Log.WriteLine(LogType.INFORMATION, "[{0}] World Server Starting...", Strings.Format(DateAndTime.TimeOfDay, "hh:mm:ss")); AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += GenericExceptionHandler; LoadConfig(); Console.ForegroundColor = ConsoleColor.Gray; AccountDatabase.SQLMessage += AccountSQLEventHandler; CharacterDatabase.SQLMessage += CharacterSQLEventHandler; WorldDatabase.SQLMessage += WorldSQLEventHandler; int ReturnValues = AccountDatabase.Connect(); if (ReturnValues > 0) { Console.WriteLine("[{0}] An SQL Error has occurred", Strings.Format(DateAndTime.TimeOfDay, "hh:mm:ss")); Console.WriteLine("*************************"); Console.WriteLine("* Press any key to exit *"); Console.WriteLine("*************************"); Console.ReadKey(); ProjectData.EndApp(); } AccountDatabase.Update("SET NAMES 'utf8';"); ReturnValues = CharacterDatabase.Connect(); if (ReturnValues > 0) { Console.WriteLine("[{0}] An SQL Error has occurred", Strings.Format(DateAndTime.TimeOfDay, "hh:mm:ss")); Console.WriteLine("*************************"); Console.WriteLine("* Press any key to exit *"); Console.WriteLine("*************************"); Console.ReadKey(); ProjectData.EndApp(); } CharacterDatabase.Update("SET NAMES 'utf8';"); ReturnValues = WorldDatabase.Connect(); if (ReturnValues > 0) { Console.WriteLine("[{0}] An SQL Error has occurred", Strings.Format(DateAndTime.TimeOfDay, "hh:mm:ss")); Console.WriteLine("*************************"); Console.WriteLine("* Press any key to exit *"); Console.WriteLine("*************************"); Console.ReadKey(); ProjectData.EndApp(); } WorldDatabase.Update("SET NAMES 'utf8';"); bool areDbVersionsOk = true; if (!WorldServiceLocator._CommonGlobalFunctions.CheckRequiredDbVersion(AccountDatabase, ServerDb.Realm)) { areDbVersionsOk = false; } if (!WorldServiceLocator._CommonGlobalFunctions.CheckRequiredDbVersion(CharacterDatabase, ServerDb.Character)) { areDbVersionsOk = false; } if (!WorldServiceLocator._CommonGlobalFunctions.CheckRequiredDbVersion(WorldDatabase, ServerDb.World)) { areDbVersionsOk = false; } if (!areDbVersionsOk) { Console.WriteLine("*************************"); Console.WriteLine("* Press any key to exit *"); Console.WriteLine("*************************"); Console.ReadKey(); ProjectData.EndApp(); } await WorldServiceLocator._WS_DBCDatabase.InitializeInternalDatabaseAsync(); WorldServiceLocator._WS_Handlers.IntializePacketHandlers(); ALLQUESTS.LoadAllQuests(); await AllGraveYards.InitializeGraveyardsAsync(); WorldServiceLocator._WS_Transports.LoadTransports(); ClsWorldServer = new WS_Network.WorldServerClass(WorldServiceLocator._DataStoreProvider); WorldServerConfiguration configuration = WorldServiceLocator._ConfigurationProvider.GetConfiguration(); server = new ProxyServer <WS_Network.WorldServerClass>(Dns.GetHostAddresses(configuration.LocalConnectHost)[0], configuration.LocalConnectPort, ClsWorldServer); ClsWorldServer.ClusterConnect(); Log.WriteLine(LogType.INFORMATION, "Interface UP at: {0}", ClsWorldServer.LocalURI); GC.Collect(); if (Process.GetCurrentProcess().PriorityClass == ProcessPriorityClass.High) { Log.WriteLine(LogType.WARNING, "Setting Process Priority to HIGH..[done]"); } else { Log.WriteLine(LogType.WARNING, "Setting Process Priority to NORMAL..[done]"); } Log.WriteLine(LogType.INFORMATION, " Load Time: {0}", Strings.Format(DateAndTime.DateDiff(DateInterval.Second, dateTimeStarted, DateAndTime.Now), "0 seconds")); Log.WriteLine(LogType.INFORMATION, " Used Memory: {0}", Strings.Format(GC.GetTotalMemory(forceFullCollection: false), "### ### ##0 bytes")); WaitConsoleCommand(); try { } catch (Exception ex2) { ProjectData.SetProjectError(ex2); Exception ex = ex2; WorldServiceLocator._WS_TimerBasedEvents.Regenerator.Dispose(); AreaTriggers.Dispose(); ProjectData.ClearProjectError(); } }
public void LoadConfig() { try { string FileName = "configs/WorldServer.ini"; string[] args = Environment.GetCommandLineArgs(); string[] array = args; foreach (var arg in from string arg in array where arg.IndexOf("config") != -1 select arg) { FileName = Strings.Trim(arg.Substring(checked (arg.IndexOf("=") + 1))); } if (!File.Exists(FileName)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("[{0}] Cannot Continue. {1} does not exist.", Strings.Format(DateAndTime.TimeOfDay, "hh:mm:ss"), FileName); Console.WriteLine("Please copy the ini files into the same directory as the Server exe files."); Console.WriteLine("Press any key to exit server: "); Console.ReadKey(); ProjectData.EndApp(); } Console.Write("[{0}] Loading Configuration from {1}...", Strings.Format(DateAndTime.TimeOfDay, "hh:mm:ss"), FileName); WorldServerConfiguration configuration = WorldServiceLocator._ConfigurationProvider.GetConfiguration(); Console.WriteLine(".[done]"); if (!configuration.VMapsEnabled) { configuration.LineOfSightEnabled = false; configuration.HeightCalcEnabled = false; } string[] AccountDBSettings = Strings.Split(configuration.AccountDatabase, ";"); if (AccountDBSettings.Length == 6) { AccountDatabase.SQLDBName = AccountDBSettings[4]; AccountDatabase.SQLHost = AccountDBSettings[2]; AccountDatabase.SQLPort = AccountDBSettings[3]; AccountDatabase.SQLUser = AccountDBSettings[0]; AccountDatabase.SQLPass = AccountDBSettings[1]; AccountDatabase.SQLTypeServer = (SQL.DB_Type)Conversions.ToInteger(Enum.Parse(typeof(SQL.DB_Type), AccountDBSettings[5])); } else { Console.WriteLine("Invalid connect string for the account database!"); } string[] CharacterDBSettings = Strings.Split(configuration.CharacterDatabase, ";"); if (CharacterDBSettings.Length == 6) { CharacterDatabase.SQLDBName = CharacterDBSettings[4]; CharacterDatabase.SQLHost = CharacterDBSettings[2]; CharacterDatabase.SQLPort = CharacterDBSettings[3]; CharacterDatabase.SQLUser = CharacterDBSettings[0]; CharacterDatabase.SQLPass = CharacterDBSettings[1]; CharacterDatabase.SQLTypeServer = (SQL.DB_Type)Conversions.ToInteger(Enum.Parse(typeof(SQL.DB_Type), CharacterDBSettings[5])); } else { Console.WriteLine("Invalid connect string for the character database!"); } string[] WorldDBSettings = Strings.Split(configuration.WorldDatabase, ";"); if (WorldDBSettings.Length == 6) { WorldDatabase.SQLDBName = WorldDBSettings[4]; WorldDatabase.SQLHost = WorldDBSettings[2]; WorldDatabase.SQLPort = WorldDBSettings[3]; WorldDatabase.SQLUser = WorldDBSettings[0]; WorldDatabase.SQLPass = WorldDBSettings[1]; WorldDatabase.SQLTypeServer = (SQL.DB_Type)Conversions.ToInteger(Enum.Parse(typeof(SQL.DB_Type), WorldDBSettings[5])); } else { Console.WriteLine("Invalid connect string for the world database!"); } WorldServiceLocator._WS_Maps.RESOLUTION_ZMAP = checked (configuration.MapResolution - 1); if (WorldServiceLocator._WS_Maps.RESOLUTION_ZMAP < 63) { WorldServiceLocator._WS_Maps.RESOLUTION_ZMAP = 63; } if (WorldServiceLocator._WS_Maps.RESOLUTION_ZMAP > 255) { WorldServiceLocator._WS_Maps.RESOLUTION_ZMAP = 255; } Log = BaseWriter.CreateLog(configuration.LogType, configuration.LogConfig); Log.LogLevel = configuration.LogLevel; } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception e = ex; Console.WriteLine(e.ToString()); ProjectData.ClearProjectError(); } }