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();
}
public void WaitForAvailable(CancellationToken? token = null)
public bool WaitForAvailable(CancellationToken? token = null)
{
try
{
if (token is CancellationToken actualToken)
Semaphore.Wait(actualToken);
else
Semaphore.Wait();
lock (Semaphore)
{
if (token is CancellationToken actualToken)
Semaphore.Wait(actualToken);
else
Semaphore.Wait();
return true;
}
}
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)
{
try
{
if (token is CancellationToken actualToken)
return Semaphore.Wait(timeout, actualToken);
else
return Semaphore.Wait(timeout);
lock (Semaphore)
{
if (token is CancellationToken actualToken)
return Semaphore.Wait(timeout, actualToken);
else
return Semaphore.Wait(timeout);
}
}
catch (OperationCanceledException)
{
@@ -61,10 +68,13 @@ namespace TwitchIrcClient.IRC
{
try
{
if (token is CancellationToken actualToken)
return Semaphore.Wait(millis, actualToken);
else
return Semaphore.Wait(millis);
lock (Semaphore)
{
if (token is CancellationToken actualToken)
return Semaphore.Wait(millis, actualToken);
else
return Semaphore.Wait(millis);
}
}
catch (OperationCanceledException)
{
@@ -76,16 +86,13 @@ namespace TwitchIrcClient.IRC
{
try
{
Semaphore.Release(MessageLimit);
}
catch (SemaphoreFullException)
{
}
catch (ObjectDisposedException)
{
lock (Semaphore)
{
Semaphore.Release(MessageLimit - Semaphore.CurrentCount);
}
}
catch (SemaphoreFullException) { }
catch (ObjectDisposedException) { }
}
#region RateLimiter Dispose