public virtual void Response(CDKeyServer server) { if (_sendingBuffer != null) { server.SendAsync(server.Socket.RemoteEndPoint, _sendingBuffer); } }
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); } }
/// <summary> /// Starts a specific server /// </summary> /// <param name="cfg">The configuration of the specific server to run</param> protected override void StartServer(ServerConfig cfg) { if (cfg.Name == ServerName) { Server = new CDKeyServer(IPAddress.Parse(cfg.ListeningAddress), cfg.ListeningPort).Start(); Console.WriteLine( StringExtensions.FormatServerTableContext(cfg.Name, cfg.ListeningAddress, cfg.ListeningPort.ToString())); } }
static void Main(string[] args) { args = new string[] { "+db", @"test.db" }; 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)) { logger.Error("+bind value must be a valid IP Address to bind to!"); } } else if (args[i].Equals("+db")) { if ((i >= args.Length - 1)) { logger.Error("+db value must be a path to the database"); } else { Database.Initialize(args[i + 1]); } } } } if (!Database.IsInitialized()) { logger.Error("Error initializing database, please confirm parameter +db is valid"); logger.Error("Press any key to continue"); Console.ReadKey(); return; } logger.Info("Database successful initialized"); CDKeyServer cdKeyServer = new CDKeyServer(bind, 29910); //ServerListReport serverListReport = new ServerListReport(bind, 27900); //ServerNatNeg serverNatNeg = new ServerNatNeg(bind, 27901); ServerSteamIdsRetrieve serverSteamIdsRetrieve = new ServerSteamIdsRetrieve(bind, 27902); //ServerListRetrieve serverListRetrieve = new ServerListRetrieve(bind, 28910, serverListReport); //LoginServer loginServer = new LoginServer(bind, 29900, 29901); LoginServer loginServer = new LoginServer(bind, 29902, 29903); ChatServer chatServer = new ChatServer(bind, 6668); HttpServer httpServer = new HttpServer(bind, 80); StatsServer statsServer = new StatsServer(bind, 29920); while (true) { Thread.Sleep(1000); } }
/// <summary> /// Starts a specific server /// </summary> /// <param name="cfg">The configuration of the specific server to run</param> protected override void StartServer(ServerConfiguration cfg) { //if (cfg.Disabled) // return; //LogWriter.Log.Write("Starting {2} server at {0}:{1}.", LogLevel.Info, cfg.Hostname, cfg.Port, cfg.Name); //LogWriter.Log.Write("Maximum connections for {0} are {1}.", LogLevel.Info, cfg.Name, cfg.MaxConnections); if (cfg.Name == ServerName) { // case "GPCM": Server = new CDKeyServer(cfg.Name, databaseDriver, new IPEndPoint(IPAddress.Parse(cfg.Hostname), cfg.Port), cfg.MaxConnections); LogWriter.Log.Write(LogLevel.Info, "|{0,-11}|{1,-14}|{2,-6}|{3,14}|", cfg.Name, cfg.Hostname, cfg.Port, cfg.MaxConnections); } }
/// <summary> /// /// </summary> /// <param name="str">MD5cdkey string</param> /// <returns></returns> public static void IsCDKeyValid(CDKeyServer server, EndPoint endPoint, Dictionary <string, string> recv) { //if (DBQuery.IsCDKeyValidate(recv["skey"])) //{ // string reply = string.Format(@"\uok\\cd\{0}\skey\{1}", recv["resp"].Substring(0, 32), recv["skey"]); // server.SendAsync(endPoint, Enctypex.XorEncoding(reply,0)); //} //else //{ // LogWriter.Log.Write( LogLevel.Debug, "Incomplete or Invalid CDKey Packet Received: {0}", recv); // //TODO cdkey invalid response //} }
public static void Switch(CDKeyServer server, EndPoint endPoint, Dictionary <string, string> recv) { try { switch (recv.Keys.First()) { //keep client alive request, we skip this case "ka": Console.WriteLine("Received keep alive command"); break; case "auth": break; case "resp": break; case "skey": SKeyHandler.IsCDKeyValid(server, endPoint, recv); break; case "disc": //disconnect from server break; case "uon": break; default: server.UnknownDataRecived(recv); break; } } catch (Exception e) { LogWriter.Log.WriteException(e); } }
public virtual void CheckDatabaseResult(CDKeyServer server) { }
public virtual void DataBaseOperation(CDKeyServer server) { }
public virtual void CheckRequest(CDKeyServer server) { }
public override void Handle(CDKeyServer server) { }
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); } }
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)); } }; Action <string, string> logGreen = (category, message) => { lock (_lock) { LogGreen(String.Format("[{0}] {1}", category, message)); } }; Action <string, string> logBlue = (category, message) => { lock (_lock) { LogBlue(String.Format("[{0}] {1}", category, message)); } }; bool runLoginServer = true; bool runNatNegServer = true; bool runCdKeyServer = false; bool runMasterServer = true; bool runListServer = true; LogGreen("Use /help command to get server's attention"); 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]; //Program.gameNam1 = gameName; } } 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 /*CHANGED FROM 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) { string s = Console.ReadLine(); if (s == "/help") { LogBlue("type /list - to see current serverlist;"); } else if (s == "/list") { PRMasterServer.Servers.ServerListRetrieve.printSLinfo(); } else if (s == "/decsht") { PRMasterServer.Servers.ServerListRetrieve.DecodeShit(); } //testing some stuff Thread.Sleep(500); } }