Esempio n. 1
0
        private async Task ProcessHeader(NetworkStream stream)
        {
            byte[] buffer = new byte[MessageHeader.HeaderSize];
            await stream.ReadAsync(buffer, 0, buffer.Length);

            using (var memoryStream = new MemoryStream(buffer))
            {
                this.Header = MessageUtils.DeserializeMessageHeader(memoryStream);
            }

            this.payloadData = new byte[this.Header.Value.Size];

            // We're either done or processing the message depending on if the message has
            this.State = this.Header.Value.Size > 0 ? MessageReaderState.ProcessingMessage :
                         MessageReaderState.MessageReady;
        }
Esempio n. 2
0
        private async Task ProcessPayload(NetworkStream stream)
        {
            do
            {
                int bytesRemaining = this.Header.Value.Size - this.bytesRead;
                int bytesReceived  = await stream.ReadAsync(this.payloadData, this.bytesRead, bytesRemaining);

                if (bytesReceived == bytesRemaining)
                {
                    // We've read the entire message, we're done! Move on to the next message.
                    this.State = MessageReaderState.MessageReady;
                    return;
                }

                bytesRead += bytesReceived;
            }while (stream.DataAvailable);
        }
Esempio n. 3
0
 /// <summary>
 /// Tell the <see cref="MessageReader" /> that it can process the next message.
 /// </summary>
 public void ProcessNextMessage()
 {
     this.State = MessageReaderState.ProcessingHeader;
 }