Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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();
            }
        }