Ejemplo n.º 1
0
        public async Task <FrameStream> ReceiveAsync(CancellationToken token)
        {
            var result         = new FrameStream();
            var frameSizeBytes = new byte[4];

            await ReadBytesAsync(_stream, frameSizeBytes, 0, 4, token);

            var frameSize = MessageFramingUtil.DecodeLength(frameSizeBytes, 0);

            if (frameSize == 0)
            {
                return(FrameStream.EMPTY);
            }

            var frame = new MemoryStream(new byte[frameSize], 0, frameSize, true, true);

            await ReadBytesAsync(_stream, frame.GetBuffer(), 0, frameSize, token);

            frame.SetLength(frameSize);
            result.AppendFrame(frame);
            return(result);
        }