fix: change order of resuming and make sure to reset heartbeat tracking values after canceling the heartbeat task
This commit is contained in:
@@ -238,17 +238,17 @@ internal sealed class DiscordGatewayClient : IDiscordGatewayClient
|
|||||||
switch (e)
|
switch (e)
|
||||||
{
|
{
|
||||||
case HelloDiscordEvent he:
|
case HelloDiscordEvent he:
|
||||||
|
_logger.LogInformation("Hello event received");
|
||||||
await SetHeartbeatIntervalAsync(he.Data.HeartbeatInterval, cancellationToken);
|
await SetHeartbeatIntervalAsync(he.Data.HeartbeatInterval, cancellationToken);
|
||||||
await StartHeartbeatAsync(cancellationToken);
|
await StartHeartbeatAsync(cancellationToken);
|
||||||
await IdentifyAsync(cancellationToken);
|
await IdentifyAsync(cancellationToken);
|
||||||
_logger.LogInformation("Hello event received");
|
|
||||||
break;
|
break;
|
||||||
case HeartbeatAckDiscordEvent:
|
case HeartbeatAckDiscordEvent:
|
||||||
|
_logger.LogInformation("Heartbeat acknowledged event received");
|
||||||
await SetHeartbeatAcknowledgedAsync(_timeProvider.GetUtcNow(), cancellationToken);
|
await SetHeartbeatAcknowledgedAsync(_timeProvider.GetUtcNow(), cancellationToken);
|
||||||
_logger.LogInformation("Heartbeat acknowledged");
|
|
||||||
break;
|
break;
|
||||||
case HeartbeatDiscordEvent:
|
case HeartbeatDiscordEvent:
|
||||||
_logger.LogInformation("Heartbeat request received");
|
_logger.LogInformation("Heartbeat request event received");
|
||||||
await SendHeartbeatAsync(cancellationToken);
|
await SendHeartbeatAsync(cancellationToken);
|
||||||
break;
|
break;
|
||||||
case DispatchDiscordEvent de:
|
case DispatchDiscordEvent de:
|
||||||
@@ -257,9 +257,9 @@ internal sealed class DiscordGatewayClient : IDiscordGatewayClient
|
|||||||
|
|
||||||
if (de is ReadyDiscordEvent re)
|
if (de is ReadyDiscordEvent re)
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("Ready event received");
|
||||||
await SetSessionIdAsync(re.Data.SessionId, cancellationToken);
|
await SetSessionIdAsync(re.Data.SessionId, cancellationToken);
|
||||||
await SetResumeGatewayUrlAsync(re.Data.ResumeGatewayUrl, cancellationToken);
|
await SetResumeGatewayUrlAsync(re.Data.ResumeGatewayUrl, cancellationToken);
|
||||||
_logger.LogInformation("Ready event received");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_eventHandlers.TryGetValue(eventType, out var handler))
|
if (_eventHandlers.TryGetValue(eventType, out var handler))
|
||||||
@@ -377,6 +377,9 @@ internal sealed class DiscordGatewayClient : IDiscordGatewayClient
|
|||||||
private async Task ReconnectAsync(CancellationToken cancellationToken)
|
private async Task ReconnectAsync(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
await CancelHeartbeatTaskAsync(cancellationToken);
|
await CancelHeartbeatTaskAsync(cancellationToken);
|
||||||
|
await SetHeartbeatSentAsync(DateTimeOffset.MinValue, cancellationToken);
|
||||||
|
await SetHeartbeatAcknowledgedAsync(DateTimeOffset.MinValue, cancellationToken);
|
||||||
|
|
||||||
await CancelReceiveMessagesTaskAsync(cancellationToken);
|
await CancelReceiveMessagesTaskAsync(cancellationToken);
|
||||||
|
|
||||||
var closeStatus = _canResume ? WebSocketCloseStatus.MandatoryExtension : WebSocketCloseStatus.NormalClosure;
|
var closeStatus = _canResume ? WebSocketCloseStatus.MandatoryExtension : WebSocketCloseStatus.NormalClosure;
|
||||||
@@ -395,9 +398,9 @@ internal sealed class DiscordGatewayClient : IDiscordGatewayClient
|
|||||||
|
|
||||||
await SetWebSocketAsync(_webSocketFactory.Create(), cancellationToken);
|
await SetWebSocketAsync(_webSocketFactory.Create(), cancellationToken);
|
||||||
await ConnectWithResumeUrlAsync(cancellationToken);
|
await ConnectWithResumeUrlAsync(cancellationToken);
|
||||||
await SendResumeAsync(cancellationToken);
|
|
||||||
await StartReceiveMessagesAsync(cancellationToken);
|
await StartReceiveMessagesAsync(cancellationToken);
|
||||||
await StartHeartbeatAsync(cancellationToken);
|
await StartHeartbeatAsync(cancellationToken);
|
||||||
|
await SendResumeAsync(cancellationToken);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user