|
@@ -24,11 +24,14 @@ namespace Discord.Net |
|
|
IsTTS = isTTS; |
|
|
IsTTS = isTTS; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private const int WarningStart = 30; |
|
|
|
|
|
|
|
|
private readonly Random _nonceRand; |
|
|
private readonly Random _nonceRand; |
|
|
private readonly DiscordClient _client; |
|
|
private readonly DiscordClient _client; |
|
|
private readonly Logger _logger; |
|
|
private readonly Logger _logger; |
|
|
private readonly ConcurrentQueue<MessageQueueItem> _pending; |
|
|
private readonly ConcurrentQueue<MessageQueueItem> _pending; |
|
|
|
|
|
private int _nextWarning; |
|
|
|
|
|
|
|
|
internal MessageQueue(DiscordClient client, Logger logger) |
|
|
internal MessageQueue(DiscordClient client, Logger logger) |
|
|
{ |
|
|
{ |
|
@@ -50,6 +53,7 @@ namespace Discord.Net |
|
|
|
|
|
|
|
|
internal Task Run(CancellationToken cancelToken, int interval) |
|
|
internal Task Run(CancellationToken cancelToken, int interval) |
|
|
{ |
|
|
{ |
|
|
|
|
|
_nextWarning = WarningStart; |
|
|
return Task.Run(async () => |
|
|
return Task.Run(async () => |
|
|
{ |
|
|
{ |
|
|
MessageQueueItem queuedMessage; |
|
|
MessageQueueItem queuedMessage; |
|
@@ -57,6 +61,15 @@ namespace Discord.Net |
|
|
while (!cancelToken.IsCancellationRequested) |
|
|
while (!cancelToken.IsCancellationRequested) |
|
|
{ |
|
|
{ |
|
|
await Task.Delay(interval).ConfigureAwait(false); |
|
|
await Task.Delay(interval).ConfigureAwait(false); |
|
|
|
|
|
int count = _pending.Count; |
|
|
|
|
|
if (count > _nextWarning) |
|
|
|
|
|
{ |
|
|
|
|
|
_logger.Warning($"Queue is backed up, currently at {_nextWarning} messages."); |
|
|
|
|
|
_nextWarning *= 2; |
|
|
|
|
|
} |
|
|
|
|
|
else if (count < WarningStart) //Reset once the problem is solved |
|
|
|
|
|
_nextWarning = WarningStart; |
|
|
|
|
|
|
|
|
while (_pending.TryDequeue(out queuedMessage)) |
|
|
while (_pending.TryDequeue(out queuedMessage)) |
|
|
{ |
|
|
{ |
|
|
try |
|
|
try |
|
|