Browse Source

Fixed reconnect logic

tags/1.0-rc
RogueException 9 years ago
parent
commit
b703fba0b7
1 changed files with 26 additions and 18 deletions
  1. +26
    -18
      src/Discord.Net/DiscordSocketClient.cs

+ 26
- 18
src/Discord.Net/DiscordSocketClient.cs View File

@@ -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;


Loading…
Cancel
Save