@@ -47,7 +47,7 @@ namespace Discord.Net.Queue
RequestQueueBucket bucket;
RequestQueueBucket bucket;
bool success = FindBucket(ex.BucketId, out bucket);
bool success = FindBucket(ex.BucketId, out bucket);
await _queue.RaiseRateLimitTriggered(ex.BucketId, success ? bucket.Definition : (Bucket) null, ex.RetryAfterMilliseconds).ConfigureAwait(false);
await _queue.RaiseRateLimitTriggered(ex.BucketId, success ? bucket.Definition : null, ex.RetryAfterMilliseconds).ConfigureAwait(false);
bucket.Pause(ex.RetryAfterMilliseconds);
bucket.Pause(ex.RetryAfterMilliseconds);
}
}
@@ -67,6 +67,7 @@ namespace Discord.Net.Queue
//Get our 429 state
//Get our 429 state
Task notifier;
Task notifier;
int resumeTime;
int resumeTime;
lock (_pauseLock)
lock (_pauseLock)
{
{
notifier = _resumeNotifier.Task;
notifier = _resumeNotifier.Task;
@@ -133,14 +134,14 @@ namespace Discord.Net.Queue
{
{
_resumeNotifier = new TaskCompletionSource<byte>();
_resumeNotifier = new TaskCompletionSource<byte>();
_pauseEndTick = unchecked(Environment.TickCount + milliseconds);
_pauseEndTick = unchecked(Environment.TickCount + milliseconds);
QueueResumeAsync(milliseconds);
QueueResumeAsync(_resumeNotifier, milliseconds);
}
}
}
}
}
}
private async Task QueueResumeAsync(int millis)
private async Task QueueResumeAsync(TaskCompletionSource<byte> resumeNotifier, int millis)
{
{
await Task.Delay(millis).ConfigureAwait(false);
await Task.Delay(millis).ConfigureAwait(false);
_ resumeNotifier.SetResult(0);
resumeNotifier.SetResult(0);
}
}
private async Task EnterAsync(int? endTick)
private async Task EnterAsync(int? endTick)
@@ -151,8 +152,7 @@ namespace Discord.Net.Queue
if (millis <= 0 || !await _semaphore.WaitAsync(millis).ConfigureAwait(false))
if (millis <= 0 || !await _semaphore.WaitAsync(millis).ConfigureAwait(false))
throw new TimeoutException();
throw new TimeoutException();
}
}
else
await _semaphore.WaitAsync().ConfigureAwait(false);
await _semaphore.WaitAsync().ConfigureAwait(false);
}
}
private async Task QueueExitAsync()
private async Task QueueExitAsync()
{
{