/// <summary> /// Disconnects and disposes this voice connection. /// </summary> public void Dispose() { if (IsDisposed) { return; } IsDisposed = true; IsInitialized = false; TokenSource.Cancel(); #if !NETSTANDARD1_1 if (Configuration.EnableIncoming) { ReceiverTokenSource.Cancel(); } #endif try { VoiceWs.DisconnectAsync(null).ConfigureAwait(false).GetAwaiter().GetResult(); UdpClient.Close(); } catch (Exception) { } Opus?.Dispose(); Opus = null; Sodium = null; Rtp = null; if (VoiceDisconnected != null) { VoiceDisconnected(Guild); } }
public async Task DisconnectAsync(int code = 1000, string message = "") { // ReSharper disable once MethodSupportsCancellation await Locker.WaitAsync().ConfigureAwait(false); try { IsClientClosed = true; if (ClientWebSocket != null) { await ClientWebSocket.CloseOutputAsync((WebSocketCloseStatus)code, message, CancellationToken.None) .ConfigureAwait(false); } if (ReadTask != null) { await ReadTask.ConfigureAwait(false); } if (IsConnected) { IsConnected = false; } SocketTokenSource?.Cancel(); SocketTokenSource?.Dispose(); ReceiverTokenSource?.Cancel(); ReceiverTokenSource?.Dispose(); } catch { // ignored } finally { Locker.Release(); } }