internal bool ReceiveFromBufferedPayload(ArraySegment <byte> buffer, out WebSocketReceiveResult receiveResult) { ThrowIfDisposed(); ValidateBufferedPayload(); int bytesTransferred = Math.Min(buffer.Count, _bufferedPayloadReceiveResult.Count); _bufferedPayloadReceiveResult.Count -= bytesTransferred; receiveResult = new WebSocketReceiveResult( bytesTransferred, _bufferedPayloadReceiveResult.MessageType, _bufferedPayloadReceiveResult.Count == 0 && _bufferedPayloadReceiveResult.EndOfMessage); Buffer.BlockCopy(_payloadBuffer.Array, _payloadBuffer.Offset + _payloadOffset, buffer.Array, buffer.Offset, bytesTransferred); bool morePayloadBuffered; if (_bufferedPayloadReceiveResult.Count == 0) { _payloadOffset = 0; _bufferedPayloadReceiveResult = null; morePayloadBuffered = false; } else { _payloadOffset += bytesTransferred; morePayloadBuffered = true; this.ValidateBufferedPayload(); } return(morePayloadBuffered); }
internal void BufferPayload(ArraySegment <byte> payload, int unconsumedDataOffset, WebSocketMessageType messageType, bool endOfMessage) { ThrowIfDisposed(); int bytesBuffered = payload.Count - unconsumedDataOffset; Debug.Assert(_payloadOffset == 0, "'m_PayloadOffset' MUST be '0' at this point."); Debug.Assert(_bufferedPayloadReceiveResult == null || _bufferedPayloadReceiveResult.Count == 0, "'_bufferedPayloadReceiveResult.Count' MUST be '0' at this point."); Buffer.BlockCopy(payload.Array, payload.Offset + unconsumedDataOffset, _payloadBuffer.Array, _payloadBuffer.Offset, bytesBuffered); _bufferedPayloadReceiveResult = new PayloadReceiveResult(bytesBuffered, messageType, endOfMessage); this.ValidateBufferedPayload(); }