bool HandleRpcResult(ulong messageId, int sequence, BinaryReader messageReader, MTProtoRequest request)
        {
            uint  code      = messageReader.ReadUInt32();
            ulong requestId = messageReader.ReadUInt64();

            if (requestId == (ulong)request.MessageId)
            {
                request.ConfirmReceived = true;
            }

            //throw new NotImplementedException();

            /*
             * lock (runningRequests)
             * {
             *      if (!runningRequests.ContainsKey(requestId))
             *      {
             *              logger.warning("rpc response on unknown request: {0}", requestId);
             *              messageReader.BaseStream.Position -= 12;
             *              return false;
             *      }
             *
             *      request = runningRequests[requestId];
             *      runningRequests.Remove(requestId);
             * }
             */

            uint innerCode = messageReader.ReadUInt32();

            if (innerCode == 0x2144ca19)
            {             // rpc_error
                int    errorCode    = messageReader.ReadInt32();
                string errorMessage = Serializers.String.Read(messageReader);

                if (errorMessage.StartsWith("FLOOD_WAIT_"))
                {
                    var resultString = Regex.Match(errorMessage, @"\d+").Value;
                    var seconds      = int.Parse(resultString);
                    Debug.WriteLine($"Should wait {seconds} sec.");
                    Thread.Sleep(1000 * seconds);
                }
                else if (errorMessage.StartsWith("PHONE_MIGRATE_"))
                {
                    var resultString = Regex.Match(errorMessage, @"\d+").Value;
                    var dcIdx        = int.Parse(resultString);
                    TcpTransport.UpdateDC(dcIdx);
                }
                else if (errorMessage.StartsWith("FILE_MIGRATE_"))
                {
                    // no need to worry! file is in another dc
                }
                else if (errorMessage.StartsWith("CHANNEL_INVALID"))
                {
                    // no need to worry! just skip this message
                }
                else
                {
                    throw new InvalidOperationException(errorMessage);
                }
            }
            else if (innerCode == 0x3072cfa1)
            {
                // gzip_packed
                byte[] packedData = Serializers.Bytes.Read(messageReader);
                using (MemoryStream packedStream = new MemoryStream(packedData, false))
                    using (GZipStream zipStream = new GZipStream(packedStream, CompressionMode.Decompress))
                        using (BinaryReader compressedReader = new BinaryReader(zipStream))
                        {
                            request.OnResponse(compressedReader);
                        }
            }
            else
            {
                messageReader.BaseStream.Position -= 4;

                request.OnResponse(messageReader);
            }

            return(false);
        }