/// <summary> /// Listener for console commands /// </summary> public ConsoleCmdListener() { ListenerThread = new Thread(() => { Console.CursorSize = 35; while ((Command = Console.ReadLine()) != null) { if (!string.IsNullOrEmpty(Command) && !string.IsNullOrWhiteSpace(Command)) { switch (Command.ToLower()) { case "/help": Logger.Log("/jsonreload -> Reloads the JSON definitions"); Logger.Log("/clear -> Clears the entire console window"); Logger.Log("/restart -> Restarts the proxy"); Logger.Log("/shutdown -> Safely shuts the proxy down"); break; case "/jsonreload": JSONPacketManager.LoadDefinitions(); break; case "/clear": Console.Clear(); break; case "/restart": Program.Restart(); break; case "/shutdown": Logger.Log("Shutting down.."); Proxy.Stop(); Program.WaitAndClose(350); break; default: Logger.Log("Unknown command! Type \"/help\" to see all available console commands.", LogType.WARNING); break; } } else { Console.CursorTop -= 1; } } }); ListenerThread.Start(); }
/// <summary> /// Starts the proxy /// </summary> public static void Start() { try { // Check dirs Helper.CheckDirectories(); // ASCII art Console.ForegroundColor = Helper.ChooseRandomColor(); Logger.CenterString(@" _____ ____ "); Logger.CenterString(@" / ___/__ ______ ___ _____________ / / / "); Logger.CenterString(@" \__ \/ / / / __ \/ _ \/ ___/ ___/ _ \/ / / "); Logger.CenterString(@" _/ / /_/ / /_/ / __/ / / /__/ __/ / / "); Logger.CenterString(@"/____/\__,_/ .___/\___/_/ \___/\___/_/_/ "); Logger.CenterString(@" /_/____ "); Logger.CenterString(@" / __ \_________ _ ____ __ "); Logger.CenterString(@" / /_/ / ___/ __ \| |/_/ / / / "); Logger.CenterString(@" / ____/ / / /_/ /> </ /_/ / "); Logger.CenterString(@" /_/ /_/ \____/_/|_|\__, / "); Logger.CenterString(@" /____/ "); Logger.CenterString(@" "); Logger.CenterString(Helper.AssemblyVersion); Logger.CenterString("Coded by expl0itr"); Logger.CenterString("Apache Version 2.0 License - © 2016"); Logger.CenterString("https://github.com/expl0itr/SupercellProxy/"); Console.Write(Environment.NewLine); Console.ResetColor(); // Show configuration values Console.Write(Environment.NewLine); Logger.CenterString("==============================="); Logger.CenterString(Config.Game.ReadableName()); Logger.CenterString(Config.Host); Logger.CenterString("Local IP: " + Helper.LocalNetworkIP); Logger.CenterString("==============================="); Console.Write(Environment.NewLine); // Set latest public key Keys.SetPublicKey(); // Bind a new socket to the local EP IPEndPoint EP = new IPEndPoint(IPAddress.Any, Port); Socket ClientListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ClientListener.Bind(EP); ClientListener.Listen(Backlog); // Initialize the JSON Packets JSONPacketManager.LoadDefinitions(); // Listen for connections AcceptThread = new Thread(() => { while (true) { Socket ClientSocket = ClientListener.Accept(); Client c = new Client(ClientSocket); ClientPool.Add(c); Logger.Log("A client connected (" + ClientSocket.GetIP() + ")! Enqueuing.."); c.Enqueue(); } }); AcceptThread.Start(); Logger.Log("Proxy started. Waiting for incoming connections.."); } catch (Exception ex) { Logger.Log("Failed to start the proxy (" + ex.GetType() + ")!"); } }