diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj index 126b6dcec..2e311d51e 100644 --- a/src/Discord.Net.Net45/Discord.Net.csproj +++ b/src/Discord.Net.Net45/Discord.Net.csproj @@ -122,6 +122,9 @@ Helpers\JsonHttpClient.Events.cs + + Helpers\TaskHelper.cs + HttpException.cs diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 44b4cd2d6..4e62571e5 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -645,15 +645,15 @@ namespace Discord /// Sends a PCM frame to the voice server. /// PCM frame to send. /// Number of bytes in this frame. - public void SendVoicePCM(byte[] data, int count) + public Task SendVoicePCM(byte[] data, int count) { CheckReady(); if (!_config.EnableVoice) throw new InvalidOperationException("Voice is not enabled for this client."); - if (count == 0) return; + if (count == 0) return TaskHelper.CompletedTask; if (_isDebugMode) RaiseOnDebugMessage(DebugMessageType.VoiceOutput, $"Queued {count} bytes for voice output."); - _voiceWebSocket.SendPCMFrame(data, count); + return _voiceWebSocket.SendPCMFrame(data, count); } /// Clears the PCM buffer. diff --git a/src/Discord.Net/DiscordDataSocket.cs b/src/Discord.Net/DiscordDataSocket.cs index bced9a8a2..59700e737 100644 --- a/src/Discord.Net/DiscordDataSocket.cs +++ b/src/Discord.Net/DiscordDataSocket.cs @@ -1,4 +1,5 @@ using Discord.API.Models; +using Discord.Helpers; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; @@ -81,11 +82,7 @@ namespace Discord RaiseOnDebugMessage(DebugMessageType.WebSocketUnknownOpCode, "Unknown Opcode: " + msg.Operation); break; } -#if DNXCORE - return Task.CompletedTask -#else - return Task.Delay(0); -#endif + return TaskHelper.CompletedTask; } protected override object GetKeepAlive() diff --git a/src/Discord.Net/DiscordVoiceSocket.cs b/src/Discord.Net/DiscordVoiceSocket.cs index 91b37e939..b439afbb5 100644 --- a/src/Discord.Net/DiscordVoiceSocket.cs +++ b/src/Discord.Net/DiscordVoiceSocket.cs @@ -369,25 +369,27 @@ namespace Discord } } - public void SendPCMFrame(byte[] data, int count) + public Task SendPCMFrame(byte[] data, int count) { if (count != _encoder.FrameSize) throw new InvalidOperationException($"Invalid frame size. Got {count}, expected {_encoder.FrameSize}."); - lock (_encoder) + byte[] payload; + int encodedLength; + lock (_encoder) { - byte[] payload = new byte[4000]; - int encodedLength = _encoder.EncodeFrame(data, payload); + payload = new byte[4000]; + encodedLength = _encoder.EncodeFrame(data, payload); if (_mode == "xsalsa20_poly1305") { //TODO: Encode } - - lock (_sendQueue) - _sendQueue.Enqueue(new Packet(payload, encodedLength)); } - } + _sendQueue.Enqueue(new Packet(payload, encodedLength)); + + return Task.Delay(0); + } public void ClearPCMFrames() { _isClearing = true; diff --git a/src/Discord.Net/Helpers/TaskHelper.cs b/src/Discord.Net/Helpers/TaskHelper.cs new file mode 100644 index 000000000..31d902465 --- /dev/null +++ b/src/Discord.Net/Helpers/TaskHelper.cs @@ -0,0 +1,17 @@ +using System.Threading.Tasks; + +namespace Discord.Helpers +{ + internal static class TaskHelper + { + public static Task CompletedTask { get; } + static TaskHelper() + { +#if DNXCORE50 + CompletedTask = Task.CompletedTask; +#else + CompletedTask = Task.Delay(0); +#endif + } + } +}