コード例 #1
0
        static void Main(string[] args)
        {
            // set close handler
            m_pHandler += Handler;
            SetConsoleCtrlHandler(m_pHandler, true);

            ServerKernel.Log = new LogWriter(Environment.CurrentDirectory + @"\");

            Console.Title = "Starting server...";

            // Server header
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("\tProject WConquer: Conquer Online Private Server Emulator");
            Console.WriteLine("\t\tDeveloped by Felipe Vieira (FTW! Masters)");
            Console.WriteLine("\t\tNovember 10th, 2016 - All Rights Reserved");
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.White;

            ServerKernel.Log.SaveLog(Environment.CurrentDirectory, true, LogType.DEBUG);
            ServerKernel.Log.SaveLog("Computer Name: " + Environment.MachineName, true, LogType.DEBUG);
            ServerKernel.Log.SaveLog("User Name: " + Environment.UserName, true, LogType.DEBUG);
            ServerKernel.Log.SaveLog("System Directory: " + Environment.SystemDirectory, true, LogType.DEBUG);
            ServerKernel.Log.SaveLog("Some environment variables:", true, LogType.DEBUG);
            ServerKernel.Log.SaveLog("OS=" + Environment.OSVersion, true, LogType.DEBUG);
            ServerKernel.Log.SaveLog("NUMBER_OF_PROCESSORS: " + Environment.ProcessorCount, true, LogType.DEBUG);
            ServerKernel.Log.SaveLog("PROCESSOR_ARCHITETURE: " + (Environment.Is64BitProcess ? "x64" : "x86"), true, LogType.DEBUG);
            Console.WriteLine();
            ServerKernel.Log.SaveLog("Initializing game server...", true);

            // read the configuration file
            ServerKernel.ConfigReader       = new IniFileName(Environment.CurrentDirectory + @"\Shell.ini");
            ServerKernel.LoginServerAddress = ServerKernel.ConfigReader.GetEntryValue("AccountServer", "ACCOUNT_IP").ToString();
            ServerKernel.ServerName         = ServerKernel.ConfigReader.GetEntryValue("AccountServer", "SERVERNAME").ToString();
            ServerKernel.LoginServerPort    = int.Parse(ServerKernel.ConfigReader.GetEntryValue("AccountServer", "ACCOUNT_PORT").ToString());
            ServerKernel.MaxOnlinePlayer    = ushort.Parse(ServerKernel.ConfigReader.GetEntryValue("AccountServer", "MAXLOGINTABLESIZE").ToString());
            ServerKernel.Username           = ServerKernel.ConfigReader.GetEntryValue("AccountServer", "LOGINNAME").ToString();
            ServerKernel.Password           = ServerKernel.ConfigReader.GetEntryValue("AccountServer", "PASSWORD").ToString();
            ServerKernel.TransferKey        = ServerKernel.ConfigReader.GetEntryValue("TransferKey", "Key").ToString();
            ServerKernel.TransferSalt       = ServerKernel.ConfigReader.GetEntryValue("TransferKey", "Salt").ToString();
            ServerKernel.Blowfish           = ServerKernel.ConfigReader.GetEntryValue("Blowfish", "Key").ToString();

            ServerKernel.Log.SaveLog("Initializing blowfish", true);
            // set the blowfish key before anything else
            BlowfishCipher.InitialKey = Encoding.ASCII.GetBytes(ServerKernel.Blowfish);

            ServerKernel.Log.SaveLog("Initializing Database", true);
            Database.Initialize();

            ServerKernel.Log.SaveLog("Starting sockets", true);

            ServerKernel.Log.SaveLog("Starting server socket...");
            try
            {
                ServerKernel.GameServer = new GameSocket();
                ServerKernel.GameServer.SetSecurity(IPProtectionLevel.Unrestricted, 6, 15);
                ServerKernel.GameServer.Bind("0.0.0.0", ServerKernel.GamePort);
                ServerKernel.GameServer.Listen(10);
                ServerKernel.Log.SaveLog("Game Server waiting for client connections...", true, LogType.MESSAGE);
            }
            catch (Exception ex)
            {
                ServerKernel.Log.SaveLog("Could not open game socket on port " + ServerKernel.GamePort, true, LogType.ERROR);
                ServerKernel.Log.SaveLog(ex.ToString(), false, LogType.EXCEPTION);
                Console.ReadKey();
                Environment.Exit(-1);
            }

            ServerKernel.Log.SaveLog("Starting threads");
            new GameAction().ProcessAction(80000000u, null, null, null, null);
            ThreadHandler.StartThreading();

            HandleCommands();

            SaveAll();

            Environment.Exit(0);
        }