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); } }
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 }); }
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); } }
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); } }