Fixed reconnect logic
This commit is contained in:
@@ -235,30 +235,37 @@ namespace Discord
|
|||||||
}
|
}
|
||||||
private async Task ReconnectInternalAsync()
|
private async Task ReconnectInternalAsync()
|
||||||
{
|
{
|
||||||
int nextReconnectDelay = 1000;
|
try
|
||||||
while (_isReconnecting)
|
|
||||||
{
|
{
|
||||||
try
|
int nextReconnectDelay = 1000;
|
||||||
|
while (_isReconnecting)
|
||||||
{
|
{
|
||||||
await Task.Delay(nextReconnectDelay).ConfigureAwait(false);
|
|
||||||
nextReconnectDelay *= 2;
|
|
||||||
if (nextReconnectDelay > 30000)
|
|
||||||
nextReconnectDelay = 30000;
|
|
||||||
|
|
||||||
await _connectionLock.WaitAsync().ConfigureAwait(false);
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await ConnectInternalAsync().ConfigureAwait(false);
|
await Task.Delay(nextReconnectDelay).ConfigureAwait(false);
|
||||||
|
nextReconnectDelay *= 2;
|
||||||
|
if (nextReconnectDelay > 30000)
|
||||||
|
nextReconnectDelay = 30000;
|
||||||
|
|
||||||
|
await _connectionLock.WaitAsync().ConfigureAwait(false);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await ConnectInternalAsync().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
finally { _connectionLock.Release(); }
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
finally { _connectionLock.Release(); }
|
catch (Exception ex)
|
||||||
return;
|
{
|
||||||
}
|
await _gatewayLogger.WarningAsync("Reconnect failed", ex).ConfigureAwait(false);
|
||||||
catch (Exception ex)
|
} }
|
||||||
{
|
}
|
||||||
await _gatewayLogger.WarningAsync("Reconnect failed", ex).ConfigureAwait(false);
|
finally
|
||||||
}
|
{
|
||||||
|
_isReconnecting = false;
|
||||||
|
_reconnectTask = null;
|
||||||
|
|
||||||
}
|
}
|
||||||
_reconnectTask = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@@ -397,6 +404,7 @@ namespace Discord
|
|||||||
await ApiClient.SendResumeAsync(_sessionId, _lastSeq).ConfigureAwait(false);
|
await ApiClient.SendResumeAsync(_sessionId, _lastSeq).ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await ApiClient.SendIdentifyAsync().ConfigureAwait(false);
|
await ApiClient.SendIdentifyAsync().ConfigureAwait(false);
|
||||||
|
_heartbeatTime = 0;
|
||||||
_heartbeatTask = RunHeartbeatAsync(data.HeartbeatInterval, _heartbeatCancelToken.Token);
|
_heartbeatTask = RunHeartbeatAsync(data.HeartbeatInterval, _heartbeatCancelToken.Token);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user