示例#1
0
        public void ExtractStream()
        {
            var fileName       = @"C:\Users\sal\Desktop\Hey.pdf";
            var offset         = 550;
            var compressedSize = 1132;

            var file = File.OpenRead(fileName);

            file.Seek(offset, SeekOrigin.Begin);

            int b;

            while ((b = file.ReadByte()) != 'm')
            {
                ;
            }
            while ((b = file.ReadByte()) != '\n')
            {
                ;
            }

            var streamOffset    = file.Position;
            var compressedBytes = new byte[compressedSize];

            file.Read(compressedBytes);
            var bytes = Zlib.Inflate(compressedBytes);

            var s = Encoding.ASCII.GetString(bytes);
        }
        public override async Task <RpcMessage[]> Receive()
        {
            CheckDisposed();

            var buffer = new byte[BufferSize];

            while (true)
            {
                int read = await stream.ReadAsync(buffer, 0, BufferSize);

                if (read == 0)
                {
                    return(null);
                }

                IEnumerable <byte> bytesRead = buffer.Where((b, i) => i < read);
                readBuffer.AddRange(bytesRead);

                try
                {
                    byte[] inflated = Zlib.Inflate(readBuffer.ToArray());
                    string encoded  = string.Concat(inflated.Select(Convert.ToChar));
                    var    result   = Rencode.Decode(encoded) as object[];
                    if (result == null)
                    {
                        return(null);
                    }

                    var messages = new List <RpcMessage>();

                    const int partsPerMessage = 3;
                    for (int skip = 0; skip < result.Length; skip += partsPerMessage)
                    {
                        object[]   messageParts = result.Skip(skip).Take(partsPerMessage).ToArray();
                        RpcMessage message      = RpcMessage.Create(messageParts);
                        messages.Add(message);
                    }

                    readBuffer.Clear();

                    return(messages.ToArray());
                }
                catch
                {
                    // Message is incomplete
                }
            }
        }