Browse Source

Cleaned up voice checks

tags/docs-0.9
RogueException 9 years ago
parent
commit
1a127eb678
1 changed files with 26 additions and 7 deletions
  1. +26
    -7
      src/Discord.Net/DiscordClient.cs

+ 26
- 7
src/Discord.Net/DiscordClient.cs View File

@@ -583,27 +583,34 @@ namespace Discord
} }


//Voice //Voice
#if !DNXCORE50
public Task JoinVoiceServer(string channelId) public Task JoinVoiceServer(string channelId)
=> JoinVoiceServer(_channels[channelId]); => JoinVoiceServer(_channels[channelId]);
public async Task JoinVoiceServer(Channel channel) public async Task JoinVoiceServer(Channel channel)
{ {
CheckReady(); CheckReady();
if (!_config.EnableVoice) throw new InvalidOperationException("Voice is not enabled for this client.");
CheckVoice();
if (channel == null) throw new ArgumentNullException(nameof(channel)); if (channel == null) throw new ArgumentNullException(nameof(channel));


await LeaveVoiceServer(); await LeaveVoiceServer();
//_currentVoiceServerId = channel.ServerId; //_currentVoiceServerId = channel.ServerId;
_webSocket.JoinVoice(channel); _webSocket.JoinVoice(channel);
#if !DNXCORE50
await _voiceWebSocket.BeginConnect(); await _voiceWebSocket.BeginConnect();
#else
await Task.CompletedTask;
#endif
} }


public async Task LeaveVoiceServer() public async Task LeaveVoiceServer()
{ {
CheckReady(); CheckReady();
if (!_config.EnableVoice) throw new InvalidOperationException("Voice is not enabled for this client.");
CheckVoice();


#if !DNXCORE50
await _voiceWebSocket.DisconnectAsync(); await _voiceWebSocket.DisconnectAsync();
#else
await Task.CompletedTask;
#endif
//if (_voiceWebSocket.CurrentVoiceServerId != null) //if (_voiceWebSocket.CurrentVoiceServerId != null)
_webSocket.LeaveVoice(); _webSocket.LeaveVoice();
} }
@@ -615,35 +622,40 @@ namespace Discord
public void SendVoicePCM(byte[] data, int count) public void SendVoicePCM(byte[] data, int count)
{ {
CheckReady(); CheckReady();
if (!_config.EnableVoice) throw new InvalidOperationException("Voice is not enabled for this client.");
CheckVoice();
if (count == 0) return; if (count == 0) return;


if (_isDebugMode) if (_isDebugMode)
RaiseOnDebugMessage(DebugMessageType.VoiceOutput, $"Queued {count} bytes for voice output."); RaiseOnDebugMessage(DebugMessageType.VoiceOutput, $"Queued {count} bytes for voice output.");
#if !DNXCORE50
_voiceWebSocket.SendPCMFrame(data, count); _voiceWebSocket.SendPCMFrame(data, count);
#endif
} }


/// <summary> Clears the PCM buffer. </summary> /// <summary> Clears the PCM buffer. </summary>
public void ClearVoicePCM() public void ClearVoicePCM()
{ {
CheckReady(); CheckReady();
if (!_config.EnableVoice) throw new InvalidOperationException("Voice is not enabled for this client.");
CheckVoice();


if (_isDebugMode) if (_isDebugMode)
RaiseOnDebugMessage(DebugMessageType.VoiceOutput, $"Cleared the voice buffer."); RaiseOnDebugMessage(DebugMessageType.VoiceOutput, $"Cleared the voice buffer.");
#if !DNXCORE50
_voiceWebSocket.ClearPCMFrames(); _voiceWebSocket.ClearPCMFrames();
#endif
} }


/// <summary> Returns a task that completes once the voice output buffer is empty. </summary> /// <summary> Returns a task that completes once the voice output buffer is empty. </summary>
public async Task WaitVoice() public async Task WaitVoice()
{ {
CheckReady(); CheckReady();
if (!_config.EnableVoice) throw new InvalidOperationException("Voice is not enabled for this client.");
CheckVoice();


#if !DNXCORE50
_voiceWebSocket.Wait(); _voiceWebSocket.Wait();
#endif
await TaskHelper.CompletedTask; await TaskHelper.CompletedTask;
} }
#endif


//Helpers //Helpers
private void CheckReady() private void CheckReady()
@@ -653,6 +665,13 @@ namespace Discord
else if (!_isConnected) else if (!_isConnected)
throw new InvalidOperationException("The client is not currently connected to Discord"); throw new InvalidOperationException("The client is not currently connected to Discord");
} }
private void CheckVoice()
{
#if !DNXCORE50
if (!_config.EnableVoice)
#endif
throw new InvalidOperationException("Voice is not enabled for this client.");
}
internal string CleanMessageText(string text) internal string CleanMessageText(string text)
{ {
text = _userRegex.Replace(text, _userRegexEvaluator); text = _userRegex.Replace(text, _userRegexEvaluator);


Loading…
Cancel
Save