コード例 #1
0
        /// <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();
        }
コード例 #2
0
        /// <summary>
        /// Starts both threads
        /// </summary>
        public void Run()
        {
            ClientThread = new Thread(() =>
            {
                while (ClientSocket.Receive(ClientHeader, 0, ClientHeader.Length, SocketFlags.None) != 0)
                {
                    // Parse Packet Length
                    var tmp          = ClientHeader.Skip(2).Take(3).ToArray();
                    var PacketLength = ((0x00 << 24) | (tmp[0] << 16) | (tmp[1] << 8) | tmp[2]);

                    // Initialize Client Buffer
                    ClientBuf = new byte[PacketLength + HEADER_SIZE];

                    // Apply header
                    for (int i = 0; i < HEADER_SIZE; i++)
                    {
                        ClientBuf[i] = ClientHeader[i];
                    }

                    // Fill Client Buffer
                    ClientSocket.Receive(ClientBuf, HEADER_SIZE, PacketLength, SocketFlags.None);

                    // Parse & Export Packet
                    Packet ClientPacket = new Packet(ClientBuf, PacketDestination.FROM_CLIENT);
                    ClientPacket.Export();

                    // Log Packet
                    Logger.Log(ClientPacket.ID + " | " + ClientPacket.DecryptedPayload.Length + " bytes", LogType.PACKET);

                    JSONPacketManager.HandlePacket(ClientPacket);

                    // Resend
                    ServerSocket.Send(ClientPacket.Rebuilt);
                }
            });

            ServerThread = new Thread(() =>
            {
                while (ServerSocket.Receive(ServerHeader, 0, ServerHeader.Length, SocketFlags.None) != 0)
                {
                    // Parse Packet Length
                    var tmp          = ServerHeader.Skip(2).Take(3).ToArray();
                    var PacketLength = ((0x00 << 24) | (tmp[0] << 16) | (tmp[1] << 8) | tmp[2]);

                    // Initialize Server Buffer
                    ServerBuf = new byte[PacketLength + HEADER_SIZE];

                    // Apply header
                    for (int i = 0; i < HEADER_SIZE; i++)
                    {
                        ServerBuf[i] = ServerHeader[i];
                    }

                    // Fill Server Buffer
                    ServerSocket.Receive(ServerBuf, HEADER_SIZE, PacketLength, SocketFlags.None);

                    // Parse & Export Packet
                    Packet ServerPacket = new Packet(ServerBuf, PacketDestination.FROM_SERVER);
                    ServerPacket.Export();

                    // Log Packet
                    Logger.Log(ServerPacket.ID + " | " + ServerPacket.DecryptedPayload.Length + " bytes", LogType.PACKET);

                    JSONPacketManager.HandlePacket(ServerPacket);

                    // Resend
                    ClientSocket.Send(ServerPacket.Rebuilt);
                }
            });

            ClientThread.Start();
            ServerThread.Start();
            Running = true;
        }
コード例 #3
0
ファイル: Proxy.cs プロジェクト: nako75/SupercellProxy
        /// <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() + ")!");
            }
        }