| @@ -23,6 +23,7 @@ namespace Discord | |||||
| private readonly ConcurrentQueue<Message> _pendingMessages; | private readonly ConcurrentQueue<Message> _pendingMessages; | ||||
| private readonly ConcurrentDictionary<string, DiscordSimpleClient> _voiceClients; | private readonly ConcurrentDictionary<string, DiscordSimpleClient> _voiceClients; | ||||
| private bool _sentInitialLog; | private bool _sentInitialLog; | ||||
| private uint _nextVoiceClientId; | |||||
| /// <summary> Returns the current logged-in user. </summary> | /// <summary> Returns the current logged-in user. </summary> | ||||
| public User CurrentUser => _currentUser; | public User CurrentUser => _currentUser; | ||||
| @@ -713,11 +714,14 @@ namespace Discord | |||||
| var client = _voiceClients.GetOrAdd(serverId, _ => | var client = _voiceClients.GetOrAdd(serverId, _ => | ||||
| { | { | ||||
| var config = _config.Clone(); | var config = _config.Clone(); | ||||
| config.LogLevel = (LogMessageSeverity)Math.Min((int)_config.LogLevel, (int)LogMessageSeverity.Warning); | |||||
| config.LogLevel = _config.LogLevel;// (LogMessageSeverity)Math.Min((int)_config.LogLevel, (int)LogMessageSeverity.Warning); | |||||
| config.EnableVoiceMultiserver = false; | config.EnableVoiceMultiserver = false; | ||||
| config.VoiceOnly = true; | |||||
| config.VoiceClientId = unchecked(++_nextVoiceClientId); | |||||
| return new DiscordSimpleClient(config, serverId); | return new DiscordSimpleClient(config, serverId); | ||||
| }); | }); | ||||
| await client.Connect(_gateway, _token).ConfigureAwait(false); | |||||
| client.LogMessage += (s, e) => RaiseOnLog(e.Severity, e.Source, $"(#{client.Config.VoiceClientId}) {e.Message}"); | |||||
| await client.Connect(_gateway, _token).ConfigureAwait(false); | |||||
| return client; | return client; | ||||
| } | } | ||||
| @@ -48,9 +48,6 @@ namespace Discord | |||||
| /// <summary> (Experimental) Enables the voice websocket and UDP client. This option requires the libsodium .dll or .so be in the local lib/ folder. </summary> | /// <summary> (Experimental) Enables the voice websocket and UDP client. This option requires the libsodium .dll or .so be in the local lib/ folder. </summary> | ||||
| public bool EnableVoiceEncryption { get { return _enableVoiceEncryption; } set { SetValue(ref _enableVoiceEncryption, value); } } | public bool EnableVoiceEncryption { get { return _enableVoiceEncryption; } set { SetValue(ref _enableVoiceEncryption, value); } } | ||||
| private bool _enableVoiceEncryption = true; | private bool _enableVoiceEncryption = true; | ||||
| /// <summary> (Experimental) Enables the client to be simultaneously connected to multiple channels at once (Discord still limits you to one channel per server). </summary> | |||||
| public bool EnableVoiceMultiserver { get { return _enableVoiceMultiserver; } set { SetValue(ref _enableVoiceMultiserver, value); } } | |||||
| private bool _enableVoiceMultiserver = false; | |||||
| #else | #else | ||||
| internal DiscordVoiceMode VoiceMode => DiscordVoiceMode.Disabled; | internal DiscordVoiceMode VoiceMode => DiscordVoiceMode.Disabled; | ||||
| internal bool EnableVoiceEncryption => false; | internal bool EnableVoiceEncryption => false; | ||||
| @@ -63,6 +60,14 @@ namespace Discord | |||||
| public bool TrackActivity { get { return _trackActivity; } set { SetValue(ref _trackActivity, value); } } | public bool TrackActivity { get { return _trackActivity; } set { SetValue(ref _trackActivity, value); } } | ||||
| private bool _trackActivity = true; | private bool _trackActivity = true; | ||||
| /// <summary> (Experimental) Enables the client to be simultaneously connected to multiple channels at once (Discord still limits you to one channel per server). </summary> | |||||
| public bool EnableVoiceMultiserver { get { return _enableVoiceMultiserver; } set { SetValue(ref _enableVoiceMultiserver, value); } } | |||||
| private bool _enableVoiceMultiserver = false; | |||||
| internal bool VoiceOnly { get { return _voiceOnly; } set { SetValue(ref _voiceOnly, value); } } | |||||
| private bool _voiceOnly; | |||||
| internal uint VoiceClientId { get { return _voiceClientId; } set { SetValue(ref _voiceClientId, value); } } | |||||
| private uint _voiceClientId; | |||||
| //Lock | //Lock | ||||
| private bool _isLocked; | private bool _isLocked; | ||||
| internal void Lock() { _isLocked = true; } | internal void Lock() { _isLocked = true; } | ||||
| @@ -61,7 +61,7 @@ namespace Discord | |||||
| _cancelToken = new CancellationToken(true); | _cancelToken = new CancellationToken(true); | ||||
| _disconnectedEvent = new ManualResetEvent(true); | _disconnectedEvent = new ManualResetEvent(true); | ||||
| _connectedEvent = new ManualResetEventSlim(false); | _connectedEvent = new ManualResetEventSlim(false); | ||||
| _dataSocket = CreateDataSocket(); | _dataSocket = CreateDataSocket(); | ||||
| if (_enableVoice) | if (_enableVoice) | ||||
| _voiceSocket = CreateVoiceSocket(); | _voiceSocket = CreateVoiceSocket(); | ||||
| @@ -86,11 +86,15 @@ namespace Discord | |||||
| if (e.WasUnexpected) | if (e.WasUnexpected) | ||||
| await socket.Reconnect(_token); | await socket.Reconnect(_token); | ||||
| }; | }; | ||||
| socket.LogMessage += (s, e) => RaiseOnLog(e.Severity, LogMessageSource.DataWebSocket, e.Message); | |||||
| if (_config.LogLevel >= LogMessageSeverity.Info) | |||||
| if (!_config.VoiceOnly) | |||||
| { | { | ||||
| socket.Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Connected"); | |||||
| socket.Disconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Disconnected"); | |||||
| socket.LogMessage += (s, e) => RaiseOnLog(e.Severity, LogMessageSource.DataWebSocket, e.Message); | |||||
| if (_config.LogLevel >= LogMessageSeverity.Info) | |||||
| { | |||||
| socket.Connected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Connected"); | |||||
| socket.Disconnected += (s, e) => RaiseOnLog(LogMessageSeverity.Info, LogMessageSource.DataWebSocket, "Disconnected"); | |||||
| } | |||||
| } | } | ||||
| socket.ReceivedEvent += (s, e) => OnReceivedEvent(e); | socket.ReceivedEvent += (s, e) => OnReceivedEvent(e); | ||||