private async Task ReadRemainingMessage()

in src/Azure.AppService.Tunnel/Tunnel/WebSockets/WebSocketConnection.cs [129:157]


    private async Task<IIncomingMessage> ReadRemainingMessage(
        WebSocketReceiveResult firstResult,
        byte[] receiveBuffer)
    {
        var segment = new ArraySegment<byte>(receiveBuffer);

        using var memoryStream = new MemoryStream();
        await memoryStream.WriteAsync(receiveBuffer, 0, firstResult.Count, _lifetime);

        WebSocketReceiveResult receiveResult;
        do
        {
            receiveResult = await _webSocket.ReceiveAsync(segment, _lifetime);

            if (receiveResult.MessageType == WebSocketMessageType.Close)
            {
                return CloseIncomingMessage.Instance;
            }

            if (receiveResult.MessageType != firstResult.MessageType)
            {
                throw new InvalidOperationException("Incorrect message type");
            }

            await memoryStream.WriteAsync(receiveBuffer, 0, receiveResult.Count, _lifetime);
        } while (!receiveResult.EndOfMessage);

        return CreateMessage(firstResult.MessageType, memoryStream.ToArray());
    }