Inheritance: IAudioClient
Esempio n. 1
0
 //Only disconnects if is current a member of this server
 public async Task Leave(VirtualClient client)
 {
     using (await _connectionLock.LockAsync())
     {
         if (CurrentClient == client)
         {
             CurrentClient = null;
             await Disconnect();
         }
     }
 }
Esempio n. 2
0
        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);
                }
            }
        }
 //Only disconnects if is current a member of this server
 public async Task Leave(VirtualClient client)
 {
     using (await _connectionLock.LockAsync().ConfigureAwait(false))
     {
         if (CurrentClient == client)
         {
             CurrentClient = null;
             await Disconnect().ConfigureAwait(false);
         }
     }
 }
 internal async Task<IAudioClient> Connect(Channel channel)
 {
     using (await _connectionLock.LockAsync())
     {
         bool changeServer = channel.Server != VoiceSocket.Server;
         if (changeServer || CurrentClient == null)
         {
             await Disconnect().ConfigureAwait(false);
             CurrentClient = new VirtualClient(this);
             VoiceSocket.Server = channel.Server;
         }
         await Join(channel);
         return CurrentClient;
     }
 }
Esempio n. 5
0
        internal async Task <IAudioClient> Connect(Channel channel)
        {
            using (await _connectionLock.LockAsync())
            {
                bool changeServer = channel.Server != VoiceSocket.Server;
                if (changeServer || CurrentClient == null)
                {
                    await Disconnect().ConfigureAwait(false);

                    CurrentClient      = new VirtualClient(this);
                    VoiceSocket.Server = channel.Server;
                }
                await Join(channel);

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

            }
		}