Example #1
0
        static void Main(string[] args)
        {
            Action<string, string> log = (category, message) => {
                lock (_lock) {
                    Log(String.Format("[{0}] {1}", category, message));
                }
            };

            Action<string, string> logError = (category, message) => {
                lock (_lock) {
                    LogError(String.Format("[{0}] {1}", category, message));
                }
            };

            IPAddress bind = IPAddress.Any;
            if (args.Length >= 1) {
                for (int i = 0; i < args.Length; i++) {
                    if (args[i].Equals("+bind")) {
                        if ((i >= args.Length - 1) || !IPAddress.TryParse(args[i + 1], out bind)) {
                            LogError("+bind value must be a valid IP Address to bind to!");
                        }
                    } else if (args[i].Equals("+db")) {
                        if ((i >= args.Length - 1)) {
                            LogError("+db value must be a path to the database");
                        } else {
                            LoginDatabase.Initialize(args[i + 1], log, logError);
                        }
                    }
                }
            }

            if (!LoginDatabase.IsInitialized()) {
                LogError("Error initializing database, please confirm parameter +db is valid");
                LogError("Press any key to continue");
                Console.ReadKey();
                return;
            }

            CDKeyServer cdKeyServer = new CDKeyServer(bind, 29910, log, logError);
            ServerListReport serverListReport = new ServerListReport(bind, 27900, log, logError);
            ServerListRetrieve serverListRetrieve = new ServerListRetrieve(bind, 28910, serverListReport, log, logError);
            LoginServer loginServer = new LoginServer(bind, 29900, 29901, log, logError);

            while (true) {
                Thread.Sleep(1000);
            }
        }
Example #2
0
        public ServerListRetrieve(IPAddress listen, ushort port, ServerListReport report, Action <string, string> log, Action <string, string> logError)
        {
            Log      = log;
            LogError = logError;

            _report = report;

            /*
             * _report.Servers.TryAdd("test", new List<GameServer>() {
             *      new GameServer() {
             *              Valid = true,
             *              IPAddress = "192.168.1.2",
             *              QueryPort = 29900,
             *              country = "AU",
             *              hostname = "[PR v1.2.0.0] 42",
             *              gamename = "battlefield2",
             *              gamever = "1.5.3153-802.0",
             *              mapname = "Awesome Map",
             *              gametype = "gpm_cq",
             *              gamevariant = "pr",
             *              numplayers = 100,
             *              maxplayers = 100,
             *              gamemode = "openplaying",
             *              password = false,
             *              timelimit = 14400,
             *              roundtime = 1,
             *              hostport = 16567,
             *              bf2_dedicated = true,
             *              bf2_ranked = true,
             *              bf2_anticheat = false,
             *              bf2_os = "win32",
             *              bf2_autorec = true,
             *              bf2_d_idx = "http://",
             *              bf2_d_dl = "http://",
             *              bf2_voip = true,
             *              bf2_autobalanced = false,
             *              bf2_friendlyfire = true,
             *              bf2_tkmode = "No Punish",
             *              bf2_startdelay = 240.0,
             *              bf2_spawntime = 300.0,
             *              bf2_sponsortext = "Welcome to an awesome server!",
             *              bf2_sponsorlogo_url = "http://",
             *              bf2_communitylogo_url = "http://",
             *              bf2_scorelimit = 100,
             *              bf2_ticketratio = 100.0,
             *              bf2_teamratio = 100.0,
             *              bf2_team1 = "US",
             *              bf2_team2 = "MEC",
             *              bf2_bots = false,
             *              bf2_pure = false,
             *              bf2_mapsize = 64,
             *              bf2_globalunlocks = true,
             *              bf2_fps = 35.0,
             *              bf2_plasma = true,
             *              bf2_reservedslots = 16,
             *              bf2_coopbotratio = 0,
             *              bf2_coopbotcount = 0,
             *              bf2_coopbotdiff = 0,
             *              bf2_novehicles = false
             *      }
             * });
             *
             * IQueryable<GameServer> servers = _report.Servers.Select(x => x.Value).AsQueryable();
             * Console.WriteLine(servers.Where("gamever = '1.5.3153-802.0' and gamevariant = 'pr' and hostname like '%[[]PR v1.2.0.0% %' and hostname like '%2%'").Count());
             */

            Thread = new Thread(StartServer)
            {
                Name = "Server Retrieving Socket Thread"
            };
            Thread.Start(new AddressInfo()
            {
                Address = listen,
                Port    = port
            });
        }
        public ServerListRetrieve(IPAddress listen, ushort port, ServerListReport report, Action<string, string> log, Action<string, string> logError)
        {
            Log = log;
            LogError = logError;

            _report = report;
            /*
            _report.Servers.TryAdd("test", new List<GameServer>() {
                new GameServer() {
                    Valid = true,

             newgame=false,
            staging=false,
            mynumplayers=61,
            maxnumplayers=139,
            nummissing=78,
            pitboss=false,
                    IPAddress = "192.168.1.2",
                    QueryPort = 29300,
                    country = "AU",
                    hostname = "Teamer 35vs49",
                    gamename = "civ4",
                    gamever = "3.19",
                    mapname = "Awesome Map",
                    gametype = "gpm_cq",
                    gamevariant = "pr",
                    numplayers = 61,
                    maxplayers = 183,
                    gamemode = "openplaying",
                    password = false,
                    timelimit = 14400,
                    roundtime = 1,
                    hostport = 16567}
                / *    ,
                    bf2_dedicated = true,
                    bf2_ranked = true,
                    bf2_anticheat = false,
                    bf2_os = "win32",
                    bf2_autorec = true,
                    bf2_d_idx = "http://",
                    bf2_d_dl = "http://",
                    bf2_voip = true,
                    bf2_autobalanced = false,
                    bf2_friendlyfire = true,
                    bf2_tkmode = "No Punish",
                    bf2_startdelay = 240.0,
                    bf2_spawntime = 300.0,
                    bf2_sponsortext = "Welcome to an awesome server!",
                    bf2_sponsorlogo_url = "http://",
                    bf2_communitylogo_url = "http://",
                    bf2_scorelimit = 100,
                    bf2_ticketratio = 100.0,
                    bf2_teamratio = 100.0,
                    bf2_team1 = "US",
                    bf2_team2 = "MEC",
                    bf2_bots = false,
                    bf2_pure = false,
                    bf2_mapsize = 64,
                    bf2_globalunlocks = true,
                    bf2_fps = 35.0,
                    bf2_plasma = true,
                    bf2_reservedslots = 16,
                    bf2_coopbotratio = 0,
                    bf2_coopbotcount = 0,
                    bf2_coopbotdiff = 0,
                    bf2_novehicles = false* /

            );*/

            IQueryable<GameServer> servers = _report.Servers.Select(x => x.Value).AsQueryable();
            //Console.WriteLine(servers.Where("gamever = '3.19' and gamevariant = 'pr' and hostname like '%[[]PR v1.2.0.0% %' and hostname like '%2%'").Count());
            //	*/

            Thread = new Thread(StartServer) {
                Name = "Server Retrieving Socket Thread"
            };
            Thread.Start(new AddressInfo() {
                Address = listen,
                Port = port
            });
        }
Example #4
0
        static void Main(string[] args)
        {
            Action<string, string> log = (category, message) => {
                lock (_lock) {
                    Log(String.Format("[{0}] {1}", category, message));
                }
            };

            Action<string, string> logError = (category, message) => {
                lock (_lock) {
                    LogError(String.Format("[{0}] {1}", category, message));
                }
            };

            bool runLoginServer = true;
            bool runNatNegServer = false;
            bool runCdKeyServer = true;
            bool runMasterServer = true;
            bool runListServer = true;
            string gameName = null;

            IPAddress bind = IPAddress.Any;
            if (args.Length >= 1)
            {
                for (int i = 0; i < args.Length; i++)
                {
                    if (args[i].Equals("+bind"))
                    {
                        if ((i >= args.Length - 1) || !IPAddress.TryParse(args[i + 1], out bind))
                        {
                            LogError("+bind value must be a valid IP Address to bind to!");
                        }
                    }
                    else if (args[i].Equals("+db"))
                    {
                        if ((i >= args.Length - 1))
                        {
                            LogError("+db value must be a path to the database");
                        }
                        else
                        {
                            LoginDatabase.Initialize(args[i + 1], log, logError);
                        }
                    }
                    else if (args[i].Equals("+game"))
                    {
                        if ((i >= args.Length - 1))
                        {
                            LogError("+game value must be a game name");
                        }
                        else
                        {
                            gameName = args[i + 1];
                        }
                    }
                    else if (args[i].Equals("+servers"))
                    {
                        if ((i >= args.Length - 1))
                        {
                            LogError("+servers value must be a comma-separated list of server types (master,login,cdkey,list,natneg)");
                        }
                        else
                        {
                            List<string> serverTypes = args[i + 1].Split(char.Parse(",")).Select(s => { return s.Trim().ToLower(); }).ToList();
                            runLoginServer = serverTypes.IndexOf("login") >= 0;
                            runNatNegServer = serverTypes.IndexOf("natneg") >= 0;
                            runListServer = serverTypes.IndexOf("list") >= 0;
                            runMasterServer = serverTypes.IndexOf("master") >= 0;
                            runCdKeyServer = serverTypes.IndexOf("cdkey") >= 0;
                        }
                    }
                }
            }

            if (runLoginServer && !LoginDatabase.IsInitialized())
            {
                LogError("Error initializing login database, please confirm parameter +db is valid");
                LogError("Press any key to continue");
                Console.ReadKey();
                return;
            }

            if (runCdKeyServer)
            {
                CDKeyServer serverCdKey = new CDKeyServer(bind, 29910, log, logError);
            }
            if (runMasterServer)
            {
                ServerListReport serverListReport = new ServerListReport(bind, 27900, log, logError, gameName);
                if (runListServer)
                {
                    ServerListRetrieve serverListRetrieve = new ServerListRetrieve(bind, 28910, serverListReport, log, logError);
                }
            }
            if (runNatNegServer)
            {
                ServerNatNeg serverNatNeg = new ServerNatNeg(bind, 27901, log, logError);
            }
            if (runLoginServer)
            {
                LoginServer serverLogin = new LoginServer(bind, 29900, 29901, log, logError);
            }

            while (true) {
                Thread.Sleep(1000);
            }
        }
Example #5
0
        static void Main(string[] args)
        {
            Action<string, string> log = (category, message) => {
                lock (_lock) {
                    Log(String.Format("[{0}] {1}", category, message));
                }
            };

            Action<string, string> logError = (category, message) => {
                lock (_lock) {
                    LogError(String.Format("[{0}] {1}", category, message));
                }
            };

            bool runLoginServer = true;
            bool runNatNegServer = true;
            bool runCdKeyServer = false;
            bool runMasterServer = true;
            bool runListServer = true;
            string gameName = null;

            IPAddress bind = IPAddress.Any;
            if (args.Length >= 1)
            {
                for (int i = 0; i < args.Length; i++)
                {
                    if (args[i].Equals("+bind"))
                    {
                        if ((i >= args.Length - 1) || !IPAddress.TryParse(args[i + 1], out bind))
                        {
                            LogError("+bind value must be a valid IP Address to bind to!");
                        }
                    }
                    else if (args[i].Equals("+db"))
                    {
                        if ((i >= args.Length - 1))
                        {
                            LogError("+db value must be a path to the database");
                        }
                        else
                        {
                            LoginDatabase.Initialize(args[i + 1], log, logError);
                        }
                    }
                    else if (args[i].Equals("+game"))
                    {
                        if ((i >= args.Length - 1))
                        {
                             //gameName = "civ4bts";
                             Log("supported games: civ4, civ4bts, civ4btsjp");
                        }
                        else
                        {
                            gameName = args[i + 1];
                        }
                    }
                    else if (args[i].Equals("+servers"))
                    {
                        if ((i >= args.Length - 1))
                        {
                            LogError("+servers value must be a comma-separated list of server types (master,login,cdkey,list,natneg)");
                        }
                        else
                        {
                            List<string> serverTypes = args[i + 1].Split(char.Parse(",")).Select(s => { return s.Trim().ToLower(); }).ToList();
                            runLoginServer = serverTypes.IndexOf("login") >= 0;
                            runNatNegServer = serverTypes.IndexOf("natneg") >= 0;
                            runListServer = serverTypes.IndexOf("list") >= 0;
                            runMasterServer = serverTypes.IndexOf("master") >= 0;
                            runCdKeyServer = serverTypes.IndexOf("cdkey") >= 0;
                        }
                    }
                }
            }

            if (runLoginServer && !LoginDatabase.IsInitialized())
            {
                LogError("Error initializing login database, please confirm parameter +db is valid");
                LogError("Press any key to continue");
                Console.ReadKey();
                return;
            }

            if (runCdKeyServer)
            {
                CDKeyServer serverCdKey = new CDKeyServer(bind, 29910, log, logError);
            }
            ServerListRetrieve serverListRetrieve = null;
            if (runMasterServer)
            {
                ServerListReport serverListReport = new ServerListReport(bind, 27900, log, logError, gameName);
                if (runListServer)
                {
                    serverListRetrieve = new ServerListRetrieve(bind, 28910, serverListReport, log, logError);
                }
            }
            ServerNatNeg serverNatNeg = null;
            if (runNatNegServer)
            {
                serverNatNeg = new ServerNatNeg(bind, 27901, log, logError);
            }
            if (runLoginServer)
            {
                LoginServer serverLogin = new LoginServer(bind, 29900, 29901, log, logError);
            }

            while (true) {
            //*
                string command = Console.ReadLine();

                Log("Executing command: " + command);
                if (command == "/nndclear" && serverNatNeg != null)
                {
                    serverNatNeg.clientsClear(true);
                }
                else if (command == "/nndshow" && serverNatNeg != null)
                {
                    serverNatNeg.clientsClear(false);
                }
                else if (command == "/list" && serverListRetrieve != null)
                {
                    serverListRetrieve.printSLinfo();
                }
                else if (command == "/quit")
                {
                    Log("Good bye");
                    serverListRetrieve.Dispose();

                    Environment.Exit(0);
                }
                else
                {
                    Log("Unknown command");
                }
             //*/
                /*
                ConsoleKeyInfo cki = Console.ReadKey(false);
                Console.Write("You pressed ");
                if ((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
                if ((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
                if ((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
                Console.WriteLine("{0} (character '{1}')", cki.Key, cki.KeyChar);
                */
                Thread.Sleep(1000);
            }
        }