public ClientConnection(ClientHandler clientHandler, Socket clientSocket)
        {
            Handler = clientHandler;
            Session = new HabboSession();

            Client = new HabboConnection(
                new SocketListener(clientSocket, 1024),
                new PacketProcessor(this, PacketType.Incoming, Constants.ServerRelease),
                new HabboEncryption(Constants.AirServerExponent, Constants.AirServerModulus, Constants.AirServerPrivateExponent)
                );

            Client.Listener.Listening     += ClientListenerOnListening;
            Client.Listener.Aborting      += ClientListenerOnAborting;
            Client.Listener.ReceivedBytes += ClientListenerOnReceivedBytes;

            Client.PacketProcessor.PacketReceived += ClientPacketProcessorOnPacketReceived;

            _packetModifier = new PacketModifier(this, Constants.ServerRelease, Constants.ServerRelease, false);
            _packetModifier.ParsedIncomingPacket += PacketModifierOnParsedIncomingPacket;
            _packetModifier.ParsedOutgoingPacket += PacketModifierOnParsedOutgoingPacket;
        }
        private void StartServerConnection(HotelConfig hotelConfig)
        {
            if (Config != null)
            {
                throw new ApplicationException("ServerConnection was already configured.");
            }

            Config = hotelConfig;

            // Setup packet modifier.
            _packetModifier.ServerRelease = Config.Release;

            // Setup server stuff.
            Server = new HabboConnection(
                new SocketListener(new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp), 1024),
                new PacketProcessor(this, PacketType.Outgoing, Config.Release),
                new HabboEncryption(Config.Exponent, Config.Modulus)
                );

            Server.Listener.Listening     += ServerListenerOnListening;
            Server.Listener.Aborting      += ServerListenerOnAborting;
            Server.Listener.ReceivedBytes += ServerListenerOnReceivedBytes;

            Server.PacketProcessor.PacketReceived += ServerPacketProcessorOnPacketReceived;

            // Open connection.
            Server.Listener.Socket.Connect(Config.ServerIp, Config.ServerPort); // TODO: Handle exception?

            if (!Server.Listener.Socket.Connected)
            {
                Shutdown("Unable to connect to target server.");
            }

            // Start listening.
            Task.Run(Server.Listener.StartListeningAsync).ConfigureAwait(false);
        }