private async Task HandleConnectionAsync(GuildPlayer guildPlayer) { var writer = _pipe.Writer; var webSocket = guildPlayer.Socket; try { do { var memory = writer.GetMemory(BUFFER_SIZE); var receiveResult = await webSocket.ReceiveAsync(memory, CancellationToken.None); if (!receiveResult.EndOfMessage) { writer.Advance(receiveResult.Count); continue; } await writer.FlushAsync(); await guildPlayer.OnMessageAsync(_pipe.Reader); } while (webSocket.State == WebSocketState.Open); } catch (Exception exception) { _logger.LogCritical(exception, exception.StackTrace); await writer.CompleteAsync(exception); await guildPlayer.OnDisconnectedAsync(exception); } }