Add request info to HttpException & RateLimitedException (#957)

* Add request info to RateLimitedException

* Remove Promise from interface.

* Add Request to HttpException.
This commit is contained in:
Alex Gravely
2018-02-18 19:19:10 -05:00
committed by Christopher F
parent bb8ebc13d2
commit 500f5f434a
6 changed files with 30 additions and 15 deletions

View File

@@ -1,4 +1,4 @@
using Newtonsoft.Json;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
#if DEBUG_LIMITS
@@ -86,7 +86,7 @@ namespace Discord.Net.Queue
Debug.WriteLine($"[{id}] (!) 502");
#endif
if ((request.Options.RetryMode & RetryMode.Retry502) == 0)
throw new HttpException(HttpStatusCode.BadGateway, null);
throw new HttpException(HttpStatusCode.BadGateway, request, null);
continue; //Retry
default:
@@ -106,7 +106,7 @@ namespace Discord.Net.Queue
}
catch { }
}
throw new HttpException(response.StatusCode, code, reason);
throw new HttpException(response.StatusCode, request, code, reason);
}
}
else
@@ -163,7 +163,7 @@ namespace Discord.Net.Queue
if (!isRateLimited)
throw new TimeoutException();
else
throw new RateLimitedException();
throw new RateLimitedException(request);
}
lock (_lock)
@@ -182,12 +182,12 @@ namespace Discord.Net.Queue
}
if ((request.Options.RetryMode & RetryMode.RetryRatelimit) == 0)
throw new RateLimitedException();
throw new RateLimitedException(request);
if (resetAt.HasValue)
{
if (resetAt > timeoutAt)
throw new RateLimitedException();
throw new RateLimitedException(request);
int millis = (int)Math.Ceiling((resetAt.Value - DateTimeOffset.UtcNow).TotalMilliseconds);
#if DEBUG_LIMITS
Debug.WriteLine($"[{id}] Sleeping {millis} ms (Pre-emptive)");
@@ -198,7 +198,7 @@ namespace Discord.Net.Queue
else
{
if ((timeoutAt.Value - DateTimeOffset.UtcNow).TotalMilliseconds < 500.0)
throw new RateLimitedException();
throw new RateLimitedException(request);
#if DEBUG_LIMITS
Debug.WriteLine($"[{id}] Sleeping 500* ms (Pre-emptive)");
#endif

View File

@@ -1,11 +1,11 @@
using Discord.Net.Rest;
using Discord.Net.Rest;
using System;
using System.IO;
using System.Threading.Tasks;
namespace Discord.Net.Queue
{
public class RestRequest
public class RestRequest : IRequest
{
public IRestClient Client { get; }
public string Method { get; }

View File

@@ -1,4 +1,4 @@
using Discord.Net.WebSockets;
using Discord.Net.WebSockets;
using System;
using System.IO;
using System.Threading;
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace Discord.Net.Queue
{
public class WebSocketRequest
public class WebSocketRequest : IRequest
{
public IWebSocketClient Client { get; }
public string BucketId { get; }