System.Net.WebSockets.ManagedWebSocket.HandleReceivedPingPongAsync C# (CSharp) Method

HandleReceivedPingPongAsync() private method

Processes a received ping or pong message.
private HandleReceivedPingPongAsync ( MessageHeader header, CancellationToken cancellationToken ) : Task
header MessageHeader The message header.
cancellationToken System.Threading.CancellationToken The cancellation token to use to cancel the websocket.
return Task
        private async Task HandleReceivedPingPongAsync(MessageHeader header, CancellationToken cancellationToken)
        {
            // Consume any (optional) payload associated with the ping/pong.
            if (header.PayloadLength > 0 && _receiveBufferCount < header.PayloadLength)
            {
                await EnsureBufferContainsAsync((int)header.PayloadLength, cancellationToken).ConfigureAwait(false);
            }

            // If this was a ping, send back a pong response.
            if (header.Opcode == MessageOpcode.Ping)
            {
                if (_isServer)
                {
                    ApplyMask(_receiveBuffer, _receiveBufferOffset, header.Mask, 0, header.PayloadLength);
                }

                await SendFrameAsync(
                    MessageOpcode.Pong, true,
                    new ArraySegment<byte>(_receiveBuffer, _receiveBufferOffset, (int)header.PayloadLength), cancellationToken).ConfigureAwait(false);
            }

            // Regardless of whether it was a ping or pong, we no longer need the payload.
            if (header.PayloadLength > 0)
            {
                ConsumeFromBuffer((int)header.PayloadLength);
            }
        }