public async Task <IAudioClient> Join(Channel channel) { if (channel == null) { throw new ArgumentNullException(nameof(channel)); } var server = channel.Server; using (await _asyncLock.LockAsync().ConfigureAwait(false)) { if (Config.EnableMultiserver) { AudioClient client; if (!_voiceClients.TryGetValue(server.Id, out client)) { client = new AudioClient(Client, server, unchecked (++_nextClientId)); _voiceClients[server.Id] = client; await client.Connect().ConfigureAwait(false); /*voiceClient.VoiceSocket.FrameReceived += (s, e) => * { * OnFrameReceieved(e); * }; * voiceClient.VoiceSocket.UserIsSpeaking += (s, e) => * { * var user = server.GetUser(e.UserId); * OnUserIsSpeakingUpdated(user, e.IsSpeaking); * };*/ } await client.Join(channel).ConfigureAwait(false); return(client); } else { if (_defaultClient.Server != server) { await _defaultClient.Disconnect().ConfigureAwait(false); _defaultClient.VoiceSocket.Server = server; await _defaultClient.Connect().ConfigureAwait(false); } var client = new VirtualClient(_defaultClient, server); _currentClient = client; await client.Join(channel).ConfigureAwait(false); return(client); } } }
public async Task<IAudioClient> Join(Channel channel) { if (channel == null) throw new ArgumentNullException(nameof(channel)); var server = channel.Server; using (await _asyncLock.LockAsync().ConfigureAwait(false)) { if (Config.EnableMultiserver) { AudioClient client; if (!_voiceClients.TryGetValue(server.Id, out client)) { client = new AudioClient(Client, server, unchecked(++_nextClientId)); _voiceClients[server.Id] = client; await client.Connect().ConfigureAwait(false); /*voiceClient.VoiceSocket.FrameReceived += (s, e) => { OnFrameReceieved(e); }; voiceClient.VoiceSocket.UserIsSpeaking += (s, e) => { var user = server.GetUser(e.UserId); OnUserIsSpeakingUpdated(user, e.IsSpeaking); };*/ } await client.Join(channel).ConfigureAwait(false); return client; } else { if (_defaultClient.Server != server) { await _defaultClient.Disconnect().ConfigureAwait(false); _defaultClient.VoiceSocket.Server = server; await _defaultClient.Connect().ConfigureAwait(false); } var client = new VirtualClient(_defaultClient, server); _currentClient = client; await client.Join(channel).ConfigureAwait(false); return client; } } }