protected override void Initialize(Nullable<ArraySegment<byte>> buffer, CancellationToken cancellationToken)
{
Debug.Assert(buffer != null, "'buffer' MUST NOT be NULL.");
_pongReceived = false;
_receiveCompleted = false;
_webSocket.ThrowIfDisposed();
int originalReceiveState = Interlocked.CompareExchange(ref _webSocket._receiveState,
ReceiveState.Application, ReceiveState.Idle);
switch (originalReceiveState)
{
case ReceiveState.Idle:
_receiveState = ReceiveState.Application;
break;
case ReceiveState.Application:
Debug.Assert(false, "'originalReceiveState' MUST NEVER be ReceiveState.Application at this point.");
break;
case ReceiveState.PayloadAvailable:
WebSocketReceiveResult receiveResult;
if (!_webSocket._internalBuffer.ReceiveFromBufferedPayload(buffer.Value, out receiveResult))
{
_webSocket.UpdateReceiveState(ReceiveState.Idle, ReceiveState.PayloadAvailable);
}
ReceiveResult = receiveResult;
_receiveCompleted = true;
break;
default:
Debug.Assert(false,
string.Format(CultureInfo.InvariantCulture, "Invalid ReceiveState '{0}'.", originalReceiveState));
break;
}
}