fix: correct locking issue that was preventing progress
This commit is contained in:
@@ -2,7 +2,7 @@ using System.Text;
|
||||
|
||||
namespace StevesBot.Worker.Discord;
|
||||
|
||||
internal class DiscordGatewayClient : IDiscordGatewayClient
|
||||
internal sealed class DiscordGatewayClient : IDiscordGatewayClient
|
||||
{
|
||||
private readonly DiscordClientOptions _options;
|
||||
private readonly IWebSocketFactory _webSocketFactory;
|
||||
@@ -80,6 +80,12 @@ internal class DiscordGatewayClient : IDiscordGatewayClient
|
||||
}
|
||||
}
|
||||
|
||||
if (_webSocket?.State is not WebSocketState.Open)
|
||||
{
|
||||
_logger.LogWarning("WebSocket is not open. Cannot receive messages.");
|
||||
return;
|
||||
}
|
||||
|
||||
// websocket message might be larger than the
|
||||
// size of the buffer so we need to loop until
|
||||
// we receive the end of the message and
|
||||
@@ -245,13 +251,10 @@ internal class DiscordGatewayClient : IDiscordGatewayClient
|
||||
|
||||
private async Task SendJsonAsync(object data, CancellationToken cancellationToken)
|
||||
{
|
||||
using (await _lock.LockAsync(cancellationToken))
|
||||
if (_webSocket?.State is not WebSocketState.Open)
|
||||
{
|
||||
if (_webSocket?.State is not WebSocketState.Open)
|
||||
{
|
||||
_logger.LogWarning("WebSocket is not open. Cannot send message.");
|
||||
return;
|
||||
}
|
||||
_logger.LogWarning("WebSocket is not open. Cannot send message.");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
@@ -275,10 +278,20 @@ internal class DiscordGatewayClient : IDiscordGatewayClient
|
||||
public void Dispose()
|
||||
{
|
||||
_heartbeatCts?.Cancel();
|
||||
_linkedCts?.Cancel();
|
||||
|
||||
if (_heartbeatTask is not null && _heartbeatTask.IsCompleted)
|
||||
{
|
||||
_heartbeatTask.Dispose();
|
||||
}
|
||||
|
||||
if (_receiveTask is not null && _receiveTask.IsCompleted)
|
||||
{
|
||||
_receiveTask.Dispose();
|
||||
}
|
||||
|
||||
_heartbeatCts?.Dispose();
|
||||
_linkedCts?.Dispose();
|
||||
_heartbeatTask?.Dispose();
|
||||
_receiveTask?.Dispose();
|
||||
_webSocket?.Dispose();
|
||||
_lock.Dispose();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace StevesBot.Worker.Discord;
|
||||
|
||||
internal class DiscordRestClient : IDiscordRestClient
|
||||
internal sealed class DiscordRestClient : IDiscordRestClient
|
||||
{
|
||||
private readonly ILogger<DiscordRestClient> _logger;
|
||||
private readonly HttpClient _httpClient;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace StevesBot.Worker.Discord;
|
||||
|
||||
internal class DiscordRestClientException : Exception
|
||||
internal sealed class DiscordRestClientException : Exception
|
||||
{
|
||||
public DiscordRestClientException()
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
namespace StevesBot.Worker.Discord.Events;
|
||||
|
||||
internal record HeartbeatAckDiscordEvent : DiscordEvent
|
||||
internal sealed record HeartbeatAckDiscordEvent : DiscordEvent
|
||||
{
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace StevesBot.Worker.Discord.Events;
|
||||
|
||||
internal record HeartbeatDiscordEvent : DiscordEvent
|
||||
internal sealed record HeartbeatDiscordEvent : DiscordEvent
|
||||
{
|
||||
public HeartbeatDiscordEvent(int? sequence)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user