|
@@ -235,30 +235,37 @@ namespace Discord |
|
|
} |
|
|
} |
|
|
private async Task ReconnectInternalAsync() |
|
|
private async Task ReconnectInternalAsync() |
|
|
{ |
|
|
{ |
|
|
int nextReconnectDelay = 1000; |
|
|
|
|
|
while (_isReconnecting) |
|
|
|
|
|
|
|
|
try |
|
|
{ |
|
|
{ |
|
|
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(); } |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
catch (Exception ex) |
|
|
|
|
|
{ |
|
|
|
|
|
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; |
|
|