diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj index e7dda6c3c..8b2b605bc 100644 --- a/src/Discord.Net.Net45/Discord.Net.csproj +++ b/src/Discord.Net.Net45/Discord.Net.csproj @@ -247,14 +247,17 @@ Net\HttpException.cs + + Net\Rest\IRestEngine.cs + Net\Rest\RestClient.cs Net\Rest\RestClient.Events.cs - - Net\Rest\SharpRestRestClient.cs + + Net\Rest\SharpRestEngine.cs Net\Voice\IDiscordVoiceBuffer.cs @@ -271,6 +274,9 @@ Net\WebSockets\DataWebSockets.Events.cs + + Net\WebSockets\IWebSocketEngine.cs + Net\WebSockets\VoiceWebSocket.cs @@ -283,8 +289,8 @@ Net\WebSockets\WebSocket.Events.cs - - Net\WebSockets\WebSocket.WebSocketSharp.cs + + Net\WebSockets\WebSocketSharpEngine.cs diff --git a/src/Discord.Net/DiscordAPIClient.cs b/src/Discord.Net/DiscordAPIClient.cs index 49e34ea57..bea5e5788 100644 --- a/src/Discord.Net/DiscordAPIClient.cs +++ b/src/Discord.Net/DiscordAPIClient.cs @@ -20,7 +20,7 @@ namespace Discord public DiscordAPIClient(DiscordAPIClientConfig config = null) { _config = config ?? new DiscordAPIClientConfig(); - _rest = new SharpRestRestClient(_config); + _rest = new RestClient(_config); } private string _token; diff --git a/src/Discord.Net/Net/Rest/IRestEngine.cs b/src/Discord.Net/Net/Rest/IRestEngine.cs new file mode 100644 index 000000000..3bed09f40 --- /dev/null +++ b/src/Discord.Net/Net/Rest/IRestEngine.cs @@ -0,0 +1,13 @@ +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; + +namespace Discord.Net.Rest +{ + internal interface IRestEngine + { + void SetToken(string token); + Task Send(HttpMethod method, string path, string json, CancellationToken cancelToken); + Task SendFile(HttpMethod method, string path, string filePath, CancellationToken cancelToken); + } +} diff --git a/src/Discord.Net/Net/Rest/RestClient.Events.cs b/src/Discord.Net/Net/Rest/RestClient.Events.cs index 88cd55713..b12fe997f 100644 --- a/src/Discord.Net/Net/Rest/RestClient.Events.cs +++ b/src/Discord.Net/Net/Rest/RestClient.Events.cs @@ -3,7 +3,7 @@ using System.Net.Http; namespace Discord.Net.Rest { - internal abstract partial class RestClient + internal sealed partial class RestClient { public class RequestEventArgs : EventArgs { @@ -21,7 +21,7 @@ namespace Discord.Net.Rest } public event EventHandler OnRequest; - protected void RaiseOnRequest(HttpMethod method, string path, string payload, double milliseconds) + private void RaiseOnRequest(HttpMethod method, string path, string payload, double milliseconds) { if (OnRequest != null) OnRequest(this, new RequestEventArgs(method, path, payload, milliseconds)); diff --git a/src/Discord.Net/Net/Rest/RestClient.cs b/src/Discord.Net/Net/Rest/RestClient.cs index 2b161ea0d..0cc6fb276 100644 --- a/src/Discord.Net/Net/Rest/RestClient.cs +++ b/src/Discord.Net/Net/Rest/RestClient.cs @@ -8,19 +8,19 @@ using System.Threading.Tasks; namespace Discord.Net.Rest { - internal abstract partial class RestClient + internal sealed partial class RestClient { - protected readonly DiscordAPIClientConfig _config; - protected CancellationToken _cancelToken; + private readonly DiscordAPIClientConfig _config; + private readonly IRestEngine _engine; + private CancellationToken _cancelToken; public RestClient(DiscordAPIClientConfig config) { _config = config; + _engine = new SharpRestEngine(config); } - protected internal abstract void SetToken(string token); - protected abstract Task SendInternal(HttpMethod method, string path, string json, CancellationToken cancelToken); - protected abstract Task SendFileInternal(HttpMethod method, string path, string filePath, CancellationToken cancelToken); + public void SetToken(string token) => _engine.SetToken(token); //DELETE private static readonly HttpMethod _delete = HttpMethod.Delete; @@ -95,7 +95,7 @@ namespace Discord.Net.Rest if (_config.LogLevel >= LogMessageSeverity.Verbose) stopwatch = Stopwatch.StartNew(); - string responseJson = await SendInternal(method, path, requestJson, _cancelToken).ConfigureAwait(false); + string responseJson = await _engine.Send(method, path, requestJson, _cancelToken).ConfigureAwait(false); #if TEST_RESPONSES if (!hasResponse && !string.IsNullOrEmpty(responseJson)) @@ -134,7 +134,7 @@ namespace Discord.Net.Rest if (_config.LogLevel >= LogMessageSeverity.Verbose) stopwatch = Stopwatch.StartNew(); - string responseJson = await SendFileInternal(method, path, filePath, _cancelToken).ConfigureAwait(false); + string responseJson = await _engine.SendFile(method, path, filePath, _cancelToken).ConfigureAwait(false); #if TEST_RESPONSES if (!hasResponse && !string.IsNullOrEmpty(responseJson)) diff --git a/src/Discord.Net/Net/Rest/SharpRestRestClient.cs b/src/Discord.Net/Net/Rest/SharpRestEngine.cs similarity index 82% rename from src/Discord.Net/Net/Rest/SharpRestRestClient.cs rename to src/Discord.Net/Net/Rest/SharpRestEngine.cs index 918d3d204..553746f14 100644 --- a/src/Discord.Net/Net/Rest/SharpRestRestClient.cs +++ b/src/Discord.Net/Net/Rest/SharpRestEngine.cs @@ -8,13 +8,14 @@ using System.Threading.Tasks; namespace Discord.Net.Rest { - internal sealed class SharpRestRestClient : RestClient + internal sealed class SharpRestEngine : IRestEngine { + private readonly DiscordAPIClientConfig _config; private readonly RestSharp.RestClient _client; - public SharpRestRestClient(DiscordAPIClientConfig config) - : base(config) + public SharpRestEngine(DiscordAPIClientConfig config) { + _config = config; _client = new RestSharp.RestClient(Endpoints.BaseApi) { PreAuthenticate = false, @@ -27,20 +28,20 @@ namespace Discord.Net.Rest _client.AddDefaultHeader("accept-encoding", "gzip,deflate"); } - protected internal override void SetToken(string token) + public void SetToken(string token) { _client.RemoveDefaultParameter("authorization"); if (token != null) _client.AddDefaultHeader("authorization", token); } - protected override Task SendInternal(HttpMethod method, string path, string json, CancellationToken cancelToken) + public Task Send(HttpMethod method, string path, string json, CancellationToken cancelToken) { var request = new RestRequest(path, GetMethod(method)); request.AddParameter("application/json", json, ParameterType.RequestBody); return Send(request, cancelToken); } - protected override Task SendFileInternal(HttpMethod method, string path, string filePath, CancellationToken cancelToken) + public Task SendFile(HttpMethod method, string path, string filePath, CancellationToken cancelToken) { var request = new RestRequest(path, Method.POST); request.AddFile("file", filePath); diff --git a/src/Discord.Net/Net/WebSockets/IWebSocketEngine.cs b/src/Discord.Net/Net/WebSockets/IWebSocketEngine.cs new file mode 100644 index 000000000..5ee746542 --- /dev/null +++ b/src/Discord.Net/Net/WebSockets/IWebSocketEngine.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace Discord.Net.WebSockets +{ + internal class WebSocketMessageEventArgs : EventArgs + { + public readonly string Message; + public WebSocketMessageEventArgs(string msg) { Message = msg; } + } + + internal interface IWebSocketEngine + { + event EventHandler ProcessMessage; + + Task Connect(string host, CancellationToken cancelToken); + Task Disconnect(); + void QueueMessage(string message); + IEnumerable GetTasks(CancellationToken cancelToken); + } +} diff --git a/src/Discord.Net/Net/WebSockets/WebSocket.cs b/src/Discord.Net/Net/WebSockets/WebSocket.cs index 4ef471845..e673e42cb 100644 --- a/src/Discord.Net/Net/WebSockets/WebSocket.cs +++ b/src/Discord.Net/Net/WebSockets/WebSocket.cs @@ -16,21 +16,6 @@ namespace Discord.Net.WebSockets Disconnecting } - internal class WebSocketMessageEventArgs : EventArgs - { - public readonly string Message; - public WebSocketMessageEventArgs(string msg) { Message = msg; } - } - internal interface IWebSocketEngine - { - event EventHandler ProcessMessage; - - Task Connect(string host, CancellationToken cancelToken); - Task Disconnect(); - void QueueMessage(string message); - IEnumerable GetTasks(CancellationToken cancelToken); - } - internal abstract partial class WebSocket { protected readonly IWebSocketEngine _engine; @@ -65,7 +50,7 @@ namespace Discord.Net.WebSockets _cancelToken = new CancellationToken(true); _connectedEvent = new ManualResetEventSlim(false); - _engine = new WSSharpWebSocketEngine(this, client.Config); + _engine = new WebSocketSharpEngine(this, client.Config); _engine.ProcessMessage += async (s, e) => { if (_logLevel >= LogMessageSeverity.Debug) diff --git a/src/Discord.Net/Net/WebSockets/WebSocket.WebSocketSharp.cs b/src/Discord.Net/Net/WebSockets/WebSocketSharpEngine.cs similarity index 94% rename from src/Discord.Net/Net/WebSockets/WebSocket.WebSocketSharp.cs rename to src/Discord.Net/Net/WebSockets/WebSocketSharpEngine.cs index bc5aff3e0..0538d160a 100644 --- a/src/Discord.Net/Net/WebSockets/WebSocket.WebSocketSharp.cs +++ b/src/Discord.Net/Net/WebSockets/WebSocketSharpEngine.cs @@ -8,7 +8,7 @@ using WSSharpNWebSocket = WebSocketSharp.WebSocket; namespace Discord.Net.WebSockets { - internal class WSSharpWebSocketEngine : IWebSocketEngine + internal class WebSocketSharpEngine : IWebSocketEngine { private readonly DiscordWebSocketClientConfig _config; private readonly ConcurrentQueue _sendQueue; @@ -22,7 +22,7 @@ namespace Discord.Net.WebSockets ProcessMessage(this, new WebSocketMessageEventArgs(msg)); } - internal WSSharpWebSocketEngine(WebSocket parent, DiscordWebSocketClientConfig config) + internal WebSocketSharpEngine(WebSocket parent, DiscordWebSocketClientConfig config) { _parent = parent; _config = config;