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());
}