System.Net.WebSockets.WebSocketBase.WebSocketOperation.ReceiveOperation.Initialize C# (CSharp) Method

Initialize() protected method

protected Initialize ( Nullable buffer, CancellationToken cancellationToken ) : void
buffer Nullable
cancellationToken System.Threading.CancellationToken
return void
                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;
                    }
                }