| @@ -52,6 +52,9 @@ | |||||
| <Compile Include="..\Discord.Net.Commands\CommandsPlugin.Events.cs"> | <Compile Include="..\Discord.Net.Commands\CommandsPlugin.Events.cs"> | ||||
| <Link>CommandsPlugin.Events.cs</Link> | <Link>CommandsPlugin.Events.cs</Link> | ||||
| </Compile> | </Compile> | ||||
| <Compile Include="..\Discord.Net\Shared\TaskHelper.cs"> | |||||
| <Link>Shared\TaskHelper.cs</Link> | |||||
| </Compile> | |||||
| <Compile Include="Properties\AssemblyInfo.cs" /> | <Compile Include="Properties\AssemblyInfo.cs" /> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||||
| @@ -1,4 +1,5 @@ | |||||
| #if DNXCORE50 | |||||
| /* | |||||
| using Discord.API; | |||||
| using System; | using System; | ||||
| using System.Globalization; | using System.Globalization; | ||||
| using System.IO; | using System.IO; | ||||
| @@ -8,7 +9,7 @@ using System.Text; | |||||
| using System.Threading; | using System.Threading; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| namespace Discord.Net.API | |||||
| namespace Discord.API | |||||
| { | { | ||||
| internal class BuiltInRestEngine : IRestEngine | internal class BuiltInRestEngine : IRestEngine | ||||
| { | { | ||||
| @@ -22,7 +23,7 @@ namespace Discord.Net.API | |||||
| UseCookies = false, | UseCookies = false, | ||||
| PreAuthenticate = false //We do auth ourselves | PreAuthenticate = false //We do auth ourselves | ||||
| }); | }); | ||||
| _client.DefaultRequestHeaders.Add("accept", "*/*"); | |||||
| _client.DefaultRequestHeaders.Add("accept", "*\/*"); | |||||
| _client.DefaultRequestHeaders.Add("accept-encoding", "gzip,deflate"); | _client.DefaultRequestHeaders.Add("accept-encoding", "gzip,deflate"); | ||||
| _client.DefaultRequestHeaders.Add("user-agent", userAgent); | _client.DefaultRequestHeaders.Add("user-agent", userAgent); | ||||
| _client.Timeout = TimeSpan.FromMilliseconds(timeout); | _client.Timeout = TimeSpan.FromMilliseconds(timeout); | ||||
| @@ -63,4 +64,4 @@ namespace Discord.Net.API | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| #endif | |||||
| */ | |||||
| @@ -1,5 +1,4 @@ | |||||
| #if !DNXCORE50 | |||||
| using RestSharp; | |||||
| using RestSharp; | |||||
| using System; | using System; | ||||
| using System.IO; | using System.IO; | ||||
| using System.Net.Http; | using System.Net.Http; | ||||
| @@ -79,5 +78,4 @@ namespace Discord.API | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| #endif | |||||
| } | |||||
| @@ -2,7 +2,6 @@ | |||||
| using System; | using System; | ||||
| using System.Diagnostics; | using System.Diagnostics; | ||||
| using System.Net.Http; | using System.Net.Http; | ||||
| using System.Reflection; | |||||
| using System.Threading; | using System.Threading; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| @@ -24,12 +23,8 @@ namespace Discord.API | |||||
| public RestClient(LogMessageSeverity logLevel, string userAgent, int timeout) | public RestClient(LogMessageSeverity logLevel, string userAgent, int timeout) | ||||
| { | { | ||||
| _logLevel = logLevel; | _logLevel = logLevel; | ||||
| #if DNXCORE50 | |||||
| _engine = new BuiltInRestEngine(userAgent, timeout); | |||||
| #else | |||||
| _engine = new RestSharpRestEngine(userAgent, timeout); | _engine = new RestSharpRestEngine(userAgent, timeout); | ||||
| #endif | |||||
| } | } | ||||
| private static readonly HttpMethod _delete = HttpMethod.Delete; | private static readonly HttpMethod _delete = HttpMethod.Delete; | ||||
| @@ -1,6 +1,4 @@ | |||||
| using Discord.Helpers; | |||||
| namespace Discord.Collections | |||||
| namespace Discord.Collections | |||||
| { | { | ||||
| public sealed class Messages : AsyncCollection<Message> | public sealed class Messages : AsyncCollection<Message> | ||||
| { | { | ||||
| @@ -1,5 +1,4 @@ | |||||
| using Discord.API; | using Discord.API; | ||||
| using Discord.Helpers; | |||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Linq; | using System.Linq; | ||||
| @@ -797,4 +796,4 @@ namespace Discord | |||||
| return _servers.TryRemove(serverId); | return _servers.TryRemove(serverId); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -56,4 +56,4 @@ namespace Discord | |||||
| public IEnumerable<User> FindUsers(string name) => _users.Find(name); | public IEnumerable<User> FindUsers(string name) => _users.Find(name); | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -275,4 +275,4 @@ namespace Discord | |||||
| RaiseEvent(nameof(UserIsSpeaking), () => UserIsSpeaking(this, new UserIsSpeakingEventArgs(member, isSpeaking))); | RaiseEvent(nameof(UserIsSpeaking), () => UserIsSpeaking(this, new UserIsSpeakingEventArgs(member, isSpeaking))); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -1,6 +1,5 @@ | |||||
| using Discord.API; | using Discord.API; | ||||
| using Discord.Collections; | using Discord.Collections; | ||||
| using Discord.Helpers; | |||||
| using Discord.WebSockets; | using Discord.WebSockets; | ||||
| using Discord.WebSockets.Data; | using Discord.WebSockets.Data; | ||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| @@ -820,4 +819,4 @@ namespace Discord | |||||
| _sentInitialLog = true; | _sentInitialLog = true; | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -1,7 +1,4 @@ | |||||
| using System; | |||||
| using System.Reflection; | |||||
| namespace Discord | |||||
| namespace Discord | |||||
| { | { | ||||
| public class DiscordClientConfig : DiscordSimpleClientConfig | public class DiscordClientConfig : DiscordSimpleClientConfig | ||||
| { | { | ||||
| @@ -10,13 +7,9 @@ namespace Discord | |||||
| private int _messageQueueInterval = 100; | private int _messageQueueInterval = 100; | ||||
| //Experimental Features | //Experimental Features | ||||
| #if !DNXCORE50 | |||||
| /// <summary> (Experimental) Enables the client to be simultaneously connected to multiple channels at once (Discord still limits you to one channel per server). </summary> | /// <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); } } | public bool EnableVoiceMultiserver { get { return _enableVoiceMultiserver; } set { SetValue(ref _enableVoiceMultiserver, value); } } | ||||
| private bool _enableVoiceMultiserver = false; | private bool _enableVoiceMultiserver = false; | ||||
| #else | |||||
| internal bool EnableVoiceMultiserver => false; | |||||
| #endif | |||||
| /// <summary> (Experimental) Enables or disables the internal message queue. This will allow SendMessage to return immediately and handle messages internally. Messages will set the IsQueued and HasFailed properties to show their progress. </summary> | /// <summary> (Experimental) Enables or disables the internal message queue. This will allow SendMessage to return immediately and handle messages internally. Messages will set the IsQueued and HasFailed properties to show their progress. </summary> | ||||
| public bool UseMessageQueue { get { return _useMessageQueue; } set { SetValue(ref _useMessageQueue, value); } } | public bool UseMessageQueue { get { return _useMessageQueue; } set { SetValue(ref _useMessageQueue, value); } } | ||||
| private bool _useMessageQueue = false; | private bool _useMessageQueue = false; | ||||
| @@ -1,8 +1,4 @@ | |||||
| using Discord.Helpers; | |||||
| using Discord.WebSockets; | |||||
| using Discord.WebSockets.Voice; | |||||
| using System; | |||||
| using System.Threading; | |||||
| using System; | |||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| namespace Discord | namespace Discord | ||||
| @@ -86,4 +82,4 @@ namespace Discord | |||||
| await TaskHelper.CompletedTask.ConfigureAwait(false); | await TaskHelper.CompletedTask.ConfigureAwait(false); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -1,5 +1,4 @@ | |||||
| using Discord.Helpers; | |||||
| using Discord.WebSockets.Data; | |||||
| using Discord.WebSockets.Data; | |||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Linq; | using System.Linq; | ||||
| @@ -331,4 +330,4 @@ namespace Discord | |||||
| return TaskHelper.CompletedTask; | return TaskHelper.CompletedTask; | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -39,23 +39,19 @@ namespace Discord | |||||
| private int _voiceBufferLength = 1000; | private int _voiceBufferLength = 1000; | ||||
| //Experimental Features | //Experimental Features | ||||
| #if !DNXCORE50 | |||||
| /// <summary> (Experimental) Enables the voice websocket and UDP client and specifies how it will be used. Any option other than Disabled requires the opus .dll or .so be in the local lib/ folder. </summary> | /// <summary> (Experimental) Enables the voice websocket and UDP client and specifies how it will be used. Any option other than Disabled requires the opus .dll or .so be in the local lib/ folder. </summary> | ||||
| public DiscordVoiceMode VoiceMode { get { return _voiceMode; } set { SetValue(ref _voiceMode, value); } } | public DiscordVoiceMode VoiceMode { get { return _voiceMode; } set { SetValue(ref _voiceMode, value); } } | ||||
| private DiscordVoiceMode _voiceMode = DiscordVoiceMode.Disabled; | private DiscordVoiceMode _voiceMode = DiscordVoiceMode.Disabled; | ||||
| /// <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; | ||||
| #else | |||||
| internal DiscordVoiceMode VoiceMode => DiscordVoiceMode.Disabled; | |||||
| internal bool EnableVoiceEncryption => false; | |||||
| #endif | |||||
| //Internals | //Internals | ||||
| internal bool VoiceOnly { get { return _voiceOnly; } set { SetValue(ref _voiceOnly, value); } } | internal bool VoiceOnly { get { return _voiceOnly; } set { SetValue(ref _voiceOnly, value); } } | ||||
| private bool _voiceOnly; | private bool _voiceOnly; | ||||
| internal uint VoiceClientId { get { return _voiceClientId; } set { SetValue(ref _voiceClientId, value); } } | internal uint VoiceClientId { get { return _voiceClientId; } set { SetValue(ref _voiceClientId, value); } } | ||||
| private uint _voiceClientId; | private uint _voiceClientId; | ||||
| internal virtual bool EnableVoice => _voiceMode != DiscordVoiceMode.Disabled; | internal virtual bool EnableVoice => _voiceMode != DiscordVoiceMode.Disabled; | ||||
| internal string UserAgent | internal string UserAgent | ||||
| @@ -82,6 +78,6 @@ namespace Discord | |||||
| var config = this.MemberwiseClone() as DiscordClientConfig; | var config = this.MemberwiseClone() as DiscordClientConfig; | ||||
| config._isLocked = false; | config._isLocked = false; | ||||
| return config; | return config; | ||||
| } | |||||
| } | |||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -1,6 +1,6 @@ | |||||
| using System; | using System; | ||||
| namespace Discord.Helpers | |||||
| namespace Discord | |||||
| { | { | ||||
| internal class EpochTime | internal class EpochTime | ||||
| { | { | ||||
| @@ -2,7 +2,7 @@ | |||||
| using System.Threading; | using System.Threading; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| namespace Discord.Helpers | |||||
| namespace Discord | |||||
| { | { | ||||
| internal static class Extensions | internal static class Extensions | ||||
| { | { | ||||
| @@ -1,6 +1,6 @@ | |||||
| using System.Text.RegularExpressions; | using System.Text.RegularExpressions; | ||||
| namespace Discord.Helpers | |||||
| namespace Discord | |||||
| { | { | ||||
| //TODO: Better name please? | //TODO: Better name please? | ||||
| internal class MessageCleaner | internal class MessageCleaner | ||||
| @@ -2,7 +2,6 @@ | |||||
| #pragma warning disable CS0649 | #pragma warning disable CS0649 | ||||
| #pragma warning disable CS0169 | #pragma warning disable CS0169 | ||||
| using Discord.Helpers; | |||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| @@ -1,6 +1,5 @@ | |||||
| #define USE_THREAD | #define USE_THREAD | ||||
| using Discord.Audio; | using Discord.Audio; | ||||
| using Discord.Helpers; | |||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| using Newtonsoft.Json.Linq; | using Newtonsoft.Json.Linq; | ||||
| using System; | using System; | ||||
| @@ -143,10 +142,8 @@ namespace Discord.WebSockets.Voice | |||||
| #else | #else | ||||
| tasks.Add(ReceiveVoiceAsync()); | tasks.Add(ReceiveVoiceAsync()); | ||||
| #endif | #endif | ||||
| #if !DNXCORE50 | |||||
| tasks.Add(WatcherAsync()); | tasks.Add(WatcherAsync()); | ||||
| #endif | |||||
| if (tasks.Count > 0) | if (tasks.Count > 0) | ||||
| { | { | ||||
| // We need to combine tasks into one because receiveThread is | // We need to combine tasks into one because receiveThread is | ||||
| @@ -444,7 +441,6 @@ namespace Discord.WebSockets.Voice | |||||
| }).ConfigureAwait(false); | }).ConfigureAwait(false); | ||||
| #endif | #endif | ||||
| } | } | ||||
| #if !DNXCORE50 | |||||
| //Closes the UDP socket when _disconnectToken is triggered, since UDPClient doesn't allow passing a canceltoken | //Closes the UDP socket when _disconnectToken is triggered, since UDPClient doesn't allow passing a canceltoken | ||||
| private Task WatcherAsync() | private Task WatcherAsync() | ||||
| { | { | ||||
| @@ -452,7 +448,6 @@ namespace Discord.WebSockets.Voice | |||||
| return cancelToken.Wait() | return cancelToken.Wait() | ||||
| .ContinueWith(_ => _udp.Close()); | .ContinueWith(_ => _udp.Close()); | ||||
| } | } | ||||
| #endif | |||||
| protected override async Task ProcessMessage(string json) | protected override async Task ProcessMessage(string json) | ||||
| { | { | ||||
| @@ -559,4 +554,4 @@ namespace Discord.WebSockets.Voice | |||||
| }); | }); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -1,4 +1,4 @@ | |||||
| #if DNXCORE50 | |||||
| /* | |||||
| using Discord.Helpers; | using Discord.Helpers; | ||||
| using System; | using System; | ||||
| using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
| @@ -38,8 +38,7 @@ namespace Discord.WebSockets | |||||
| public Task Connect(string host, CancellationToken cancelToken) | public Task Connect(string host, CancellationToken cancelToken) | ||||
| { | { | ||||
| _webSocket = new ClientWebSocket(); | _webSocket = new ClientWebSocket(); | ||||
| _webSocket.Options.KeepAliveInterval = TimeSpan.Zero; | |||||
| return _webSocket.ConnectAsync(new Uri(host), cancelToken); | |||||
| return _webSocket.ConnectAsync(new Uri(host), cancelToken); | |||||
| } | } | ||||
| public Task Disconnect() | public Task Disconnect() | ||||
| @@ -151,4 +150,4 @@ namespace Discord.WebSockets | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| #endif | |||||
| */ | |||||
| @@ -1,6 +1,4 @@ | |||||
| #if !DNXCORE50 | |||||
| using Discord.Helpers; | |||||
| using System; | |||||
| using System; | |||||
| using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Threading; | using System.Threading; | ||||
| @@ -100,5 +98,4 @@ namespace Discord.WebSockets | |||||
| _sendQueue.Enqueue(message); | _sendQueue.Enqueue(message); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| #endif | |||||
| } | |||||
| @@ -64,12 +64,8 @@ namespace Discord.WebSockets | |||||
| _loginTimeout = client.Config.ConnectionTimeout; | _loginTimeout = client.Config.ConnectionTimeout; | ||||
| _cancelToken = new CancellationToken(true); | _cancelToken = new CancellationToken(true); | ||||
| _connectedEvent = new ManualResetEventSlim(false); | _connectedEvent = new ManualResetEventSlim(false); | ||||
| #if DNXCORE50 | |||||
| _engine = new BuiltInWebSocketEngine(client.Config.WebSocketInterval); | |||||
| #else | |||||
| _engine = new WSSharpWebSocketEngine(this, client.Config.UserAgent, client.Config.WebSocketInterval); | _engine = new WSSharpWebSocketEngine(this, client.Config.UserAgent, client.Config.WebSocketInterval); | ||||
| #endif | |||||
| _engine.ProcessMessage += async (s, e) => | _engine.ProcessMessage += async (s, e) => | ||||
| { | { | ||||
| if (_logLevel >= LogMessageSeverity.Debug) | if (_logLevel >= LogMessageSeverity.Debug) | ||||