public async Task <int> ReadNextMessagesAsync(Stream outputMessageStream) { MessageCount = 0; RemainingMessageDataSize = 0; var previousStreamPosition = outputMessageStream.Position; outputMessageStream.Position = outputMessageStream.Length; try { while (true) { await DataStreamBuffer.ReadFromAsync(InputStream).ConfigureAwait(false); //Populate the buffer if (!ProcessStream(outputMessageStream)) { break; } } CheckEndOfStreamValidity(); } finally { outputMessageStream.Position = previousStreamPosition; DataStreamBuffer.Reset(); } return(MessageCount); }
void ParseMessages(Stream outputMessageStream) { while (DataStreamBuffer.RemainingData > 0) { if (RemainingMessageDataSize == 0) { if (ReadAndParseChunkSize() == ChunkType.ZeroChunk) { if (IsMessageOpen) { CloseMessage(); MessageCount++; } continue; } OpenMessage(); } var writeLength = Math.Min(RemainingMessageDataSize, DataStreamBuffer.RemainingData); DataStreamBuffer.WriteInto(outputMessageStream, writeLength); RemainingMessageDataSize -= writeLength; } }
public int ReadNextMessages(Stream outputMessageStream) { MessageCount = 0; RemainingMessageDataSize = 0; var previousStreamPosition = outputMessageStream.Position; outputMessageStream.Position = outputMessageStream.Length; try { while (true) { DataStreamBuffer.ReadFrom(InputStream); //Populate the buffer if (!ProcessStream(outputMessageStream)) { break; } } CheckEndOfStreamValidity(); } finally { outputMessageStream.Position = previousStreamPosition; DataStreamBuffer.Reset(); } return(MessageCount); }
private int ReadChunkSize() { DataStreamBuffer.WriteInto(_chunkSizeBuffer, 0, ChunkHeaderSize); return(PackStreamBitConverter.ToUInt16(_chunkSizeBuffer)); }