Example #1
0
        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);
            }
        }