attempted fix to RateLimiter, not fully tested yet

This commit is contained in:
Cameron
2024-03-21 09:15:30 -05:00
parent 917e90558d
commit cceae30d5e

View File

@@ -29,28 +29,35 @@ namespace TwitchIrcClient.IRC
Timer.Start(); Timer.Start();
} }
public void WaitForAvailable(CancellationToken? token = null) public bool WaitForAvailable(CancellationToken? token = null)
{ {
try try
{ {
if (token is CancellationToken actualToken) lock (Semaphore)
Semaphore.Wait(actualToken); {
else if (token is CancellationToken actualToken)
Semaphore.Wait(); Semaphore.Wait(actualToken);
else
Semaphore.Wait();
return true;
}
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
//caller is responsible for checking whether connection is cancelled before trying to send return false;
} }
} }
public bool WaitForAvailable(TimeSpan timeout, CancellationToken? token = null) public bool WaitForAvailable(TimeSpan timeout, CancellationToken? token = null)
{ {
try try
{ {
if (token is CancellationToken actualToken) lock (Semaphore)
return Semaphore.Wait(timeout, actualToken); {
else if (token is CancellationToken actualToken)
return Semaphore.Wait(timeout); return Semaphore.Wait(timeout, actualToken);
else
return Semaphore.Wait(timeout);
}
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
@@ -61,10 +68,13 @@ namespace TwitchIrcClient.IRC
{ {
try try
{ {
if (token is CancellationToken actualToken) lock (Semaphore)
return Semaphore.Wait(millis, actualToken); {
else if (token is CancellationToken actualToken)
return Semaphore.Wait(millis); return Semaphore.Wait(millis, actualToken);
else
return Semaphore.Wait(millis);
}
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
@@ -76,16 +86,13 @@ namespace TwitchIrcClient.IRC
{ {
try try
{ {
Semaphore.Release(MessageLimit); lock (Semaphore)
} {
catch (SemaphoreFullException) Semaphore.Release(MessageLimit - Semaphore.CurrentCount);
{ }
}
catch (ObjectDisposedException)
{
} }
catch (SemaphoreFullException) { }
catch (ObjectDisposedException) { }
} }
#region RateLimiter Dispose #region RateLimiter Dispose