@@ -39,7 +39,7 @@ internal class WebSocketBuffer : IDisposable
3939 private readonly ArraySegment < byte > _propertyBuffer ;
4040 private readonly int _sendBufferSize ;
4141 private volatile int _payloadOffset ;
42- private volatile WebSocketReceiveResult _bufferedPayloadReceiveResult ;
42+ private volatile PayloadReceiveResult _bufferedPayloadReceiveResult ;
4343 private long _pinnedSendBufferStartAddress ;
4444 private long _pinnedSendBufferEndAddress ;
4545 private ArraySegment < byte > _pinnedSendBuffer ;
@@ -305,7 +305,7 @@ internal void BufferPayload(ArraySegment<byte> payload,
305305 Debug . Assert ( _payloadOffset == 0 ,
306306 "'m_PayloadOffset' MUST be '0' at this point." ) ;
307307 Debug . Assert ( _bufferedPayloadReceiveResult == null || _bufferedPayloadReceiveResult . Count == 0 ,
308- "'m_BufferedPayloadReceiveResult .Count' MUST be '0' at this point." ) ;
308+ "'_bufferedPayloadReceiveResult .Count' MUST be '0' at this point." ) ;
309309
310310 Buffer . BlockCopy ( payload . Array ,
311311 payload . Offset + unconsumedDataOffset ,
@@ -314,7 +314,7 @@ internal void BufferPayload(ArraySegment<byte> payload,
314314 bytesBuffered ) ;
315315
316316 _bufferedPayloadReceiveResult =
317- new WebSocketReceiveResult ( bytesBuffered , messageType , endOfMessage ) ;
317+ new PayloadReceiveResult ( bytesBuffered , messageType , endOfMessage ) ;
318318
319319 this . ValidateBufferedPayload ( ) ;
320320 }
@@ -326,12 +326,12 @@ internal bool ReceiveFromBufferedPayload(ArraySegment<byte> buffer, out WebSocke
326326
327327 int bytesTransferred = Math . Min ( buffer . Count , _bufferedPayloadReceiveResult . Count ) ;
328328
329+ _bufferedPayloadReceiveResult . Count -= bytesTransferred ;
330+
329331 receiveResult = new WebSocketReceiveResult (
330332 bytesTransferred ,
331333 _bufferedPayloadReceiveResult . MessageType ,
332- bytesTransferred == 0 && _bufferedPayloadReceiveResult . EndOfMessage ,
333- _bufferedPayloadReceiveResult . CloseStatus ,
334- _bufferedPayloadReceiveResult . CloseStatusDescription ) ;
334+ _bufferedPayloadReceiveResult . Count == 0 && _bufferedPayloadReceiveResult . EndOfMessage ) ;
335335
336336 Buffer . BlockCopy ( _payloadBuffer . Array ,
337337 _payloadBuffer . Offset + _payloadOffset ,
@@ -558,9 +558,9 @@ private void ThrowIfDisposed()
558558 private void ValidateBufferedPayload ( )
559559 {
560560 Debug . Assert ( _bufferedPayloadReceiveResult != null ,
561- "'m_BufferedPayloadReceiveResult ' MUST NOT be NULL." ) ;
561+ "'_bufferedPayloadReceiveResult ' MUST NOT be NULL." ) ;
562562 Debug . Assert ( _bufferedPayloadReceiveResult . Count >= 0 ,
563- "'m_BufferedPayloadReceiveResult .Count' MUST NOT be negative." ) ;
563+ "'_bufferedPayloadReceiveResult .Count' MUST NOT be negative." ) ;
564564 Debug . Assert ( _payloadOffset >= 0 , "'m_PayloadOffset' MUST NOT be smaller than 0." ) ;
565565 Debug . Assert ( _payloadOffset <= _payloadBuffer . Count ,
566566 "'m_PayloadOffset' MUST NOT be bigger than 'm_PayloadBuffer.Count'." ) ;
@@ -685,5 +685,24 @@ private static class SendBufferState
685685 public const int None = 0 ;
686686 public const int SendPayloadSpecified = 1 ;
687687 }
688+
689+ private class PayloadReceiveResult
690+ {
691+ public int Count { get ; set ; }
692+ public bool EndOfMessage { get ; }
693+ public WebSocketMessageType MessageType { get ; }
694+
695+ public PayloadReceiveResult ( int count , WebSocketMessageType messageType , bool endOfMessage )
696+ {
697+ if ( count < 0 )
698+ {
699+ throw new ArgumentOutOfRangeException ( nameof ( count ) ) ;
700+ }
701+
702+ Count = count ;
703+ EndOfMessage = endOfMessage ;
704+ MessageType = messageType ;
705+ }
706+ }
688707 }
689- }
708+ }
0 commit comments