| @@ -1,6 +1,7 @@ | |||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| using System; | using System; | ||||
| using System.Diagnostics; | using System.Diagnostics; | ||||
| using System.Net; | |||||
| using System.Net.Http; | using System.Net.Http; | ||||
| using System.Reflection; | using System.Reflection; | ||||
| using System.Threading; | using System.Threading; | ||||
| @@ -20,12 +21,13 @@ namespace Discord.Net.API | |||||
| private readonly IRestEngine _engine; | private readonly IRestEngine _engine; | ||||
| private readonly LogMessageSeverity _logLevel; | private readonly LogMessageSeverity _logLevel; | ||||
| private CancellationToken _cancelToken; | private CancellationToken _cancelToken; | ||||
| private ServicePoint _servicePoint; | |||||
| public RestClient(LogMessageSeverity logLevel) | public RestClient(LogMessageSeverity logLevel) | ||||
| { | { | ||||
| _logLevel = logLevel; | _logLevel = logLevel; | ||||
| string version = typeof(RestClient).GetTypeInfo().Assembly.GetName().Version.ToString(2); | |||||
| string version = typeof(RestClient).GetTypeInfo().Assembly.GetName().Version.ToString(2); | |||||
| string userAgent = $"Discord.Net/{version} (https://github.com/RogueException/Discord.Net)"; | string userAgent = $"Discord.Net/{version} (https://github.com/RogueException/Discord.Net)"; | ||||
| #if DNXCORE50 | #if DNXCORE50 | ||||
| _engine = new BuiltInRestEngine(userAgent); | _engine = new BuiltInRestEngine(userAgent); | ||||
| @@ -107,8 +109,11 @@ namespace Discord.Net.API | |||||
| if (_logLevel >= LogMessageSeverity.Verbose) | if (_logLevel >= LogMessageSeverity.Verbose) | ||||
| stopwatch = Stopwatch.StartNew(); | stopwatch = Stopwatch.StartNew(); | ||||
| string responseJson = await _engine.Send(method, path, requestJson, _cancelToken).ConfigureAwait(false); | string responseJson = await _engine.Send(method, path, requestJson, _cancelToken).ConfigureAwait(false); | ||||
| if (_servicePoint == null) | |||||
| ConfigureServicePoint(); | |||||
| #if TEST_RESPONSES | #if TEST_RESPONSES | ||||
| if (!hasResponse && !string.IsNullOrEmpty(responseJson)) | if (!hasResponse && !string.IsNullOrEmpty(responseJson)) | ||||
| throw new Exception("API check failed: Response is not empty."); | throw new Exception("API check failed: Response is not empty."); | ||||
| @@ -147,6 +152,9 @@ namespace Discord.Net.API | |||||
| stopwatch = Stopwatch.StartNew(); | stopwatch = Stopwatch.StartNew(); | ||||
| string responseJson = await _engine.SendFile(method, path, filePath, _cancelToken).ConfigureAwait(false); | string responseJson = await _engine.SendFile(method, path, filePath, _cancelToken).ConfigureAwait(false); | ||||
| if (_servicePoint == null) | |||||
| ConfigureServicePoint(); | |||||
| #if TEST_RESPONSES | #if TEST_RESPONSES | ||||
| if (!hasResponse && !string.IsNullOrEmpty(responseJson)) | if (!hasResponse && !string.IsNullOrEmpty(responseJson)) | ||||
| throw new Exception("API check failed: Response is not empty."); | throw new Exception("API check failed: Response is not empty."); | ||||
| @@ -184,5 +192,14 @@ namespace Discord.Net.API | |||||
| internal void SetToken(string token) => _engine.SetToken(token); | internal void SetToken(string token) => _engine.SetToken(token); | ||||
| internal void SetCancelToken(CancellationToken token) => _cancelToken = token; | internal void SetCancelToken(CancellationToken token) => _cancelToken = token; | ||||
| private void ConfigureServicePoint() | |||||
| { | |||||
| _servicePoint = ServicePointManager.FindServicePoint(new Uri(Endpoints.BaseApi)); | |||||
| _servicePoint.Expect100Continue = true; | |||||
| _servicePoint.UseNagleAlgorithm = false; | |||||
| //_servicePoint.MaxIdleTime = int.MaxValue; | |||||
| //_servicePoint.ConnectionLeaseTimeout = int.MaxValue; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||