public ProxyMessageHandler(TcpClient client, INetworkHandler networkHandler)
        {
            _client         = client;
            _endPoint       = (IPEndPoint)client.Client.RemoteEndPoint;
            _networkHandler = networkHandler;

            Log.Debug("Connecting from proxy to local server handler");


            Log.Debug("CONNECTED from proxy to local server handler");

            var stream = _client.GetStream();

            _writer = new BinaryWriter(new BufferedStream(stream, _client.SendBufferSize));
            BinaryReader reader = new BinaryReader(stream);

            new Thread(() =>
            {
                while (true)
                {
                    if (_client == null)
                    {
                        return;
                    }

                    try
                    {
                        int packageNs = reader.ReadByte();
                        int len       = reader.ReadInt32();

                        if (len == -1)
                        {
                            Close();
                            return;
                        }

                        byte[] bytes = reader.ReadBytes(len);

                        if (bytes.Length > _client.ReceiveBufferSize)
                        {
                            Log.Warn($"Data of length {bytes.Length}bytes is bigger than TCP buffer {_client.ReceiveBufferSize}bytes");
                        }

                        if (len == 0)
                        {
                            continue;
                        }

                        FastThreadPool.QueueUserWorkItem(() =>
                        {
                            Package message = null;
                            if (packageNs == 0)
                            {
                                message = PackageFactory.CreatePackage(bytes[0], bytes, "mcpe");
                            }
                            else if (packageNs == 1)
                            {
                                message = PackageFactory.CreatePackage(bytes[0], bytes, "ftl");
                            }

                            if (message == null)
                            {
                                Log.Error($"Bad parse of message");
                            }
                            else
                            {
                                message.Timer.Restart();

                                if (Log.IsDebugEnabled)
                                {
                                    Log.Debug($"Got message {message.GetType().Name}");
                                }
                                _networkHandler.SendPackage(message);
                            }
                        });
                    }
                    catch (Exception e)
                    {
                        Log.Error("Receive error", e);
                        Close();
                    }
                }
            })
            {
                IsBackground = true
            }.Start();
        }