static ITlResponse HandleRpcResult(BinaryReader messageReader, MTProtoRequest request) { var combinator = new Combinator(messageReader.ReadUInt32()); var requestId = messageReader.ReadUInt64(); if (requestId == (ulong)request.MessageId) { request.ConfirmReceived = true; } var innerCode = messageReader.ReadUInt32(); if (innerCode != 0x3072cfa1) { return(null); } ITlResponse response = null; var packedData = Serializers.Bytes.read(messageReader); var packedStream = new MemoryStream(packedData, false); var zipStream = new GZipStream(packedStream, CompressionMode.Decompress); var compressedReader = new BinaryReader(zipStream); var responseHandlerFactory = new ResponseHandlerFactory(); var handler = responseHandlerFactory.GetHandler <ContactsContacts>(); if (handler != null) { response = handler.Populate(compressedReader); } const int bufferSize = 4096; using (var memoryStream = new MemoryStream()) { var buffer = new byte[bufferSize]; int count; while ((count = compressedReader.Read(buffer, 0, buffer.Length)) != 0) { memoryStream.Write(buffer, 0, count); } } compressedReader.Dispose(); zipStream.Dispose(); packedStream.Dispose(); return(response); }
ITlResponse ProcessMessage(ulong messageId, BinaryReader messageReader, MTProtoRequest request) { ITlResponse response = null; needConfirmation.Add(messageId); var code = messageReader.ReadUInt32(); messageReader.BaseStream.Position -= 4; if (code == 0xf35c6d01) { response = HandleRpcResult(messageReader, request); } return(response); }