| @@ -245,15 +245,15 @@ namespace Discord.WebSocket | |||||
| await _gatewayLogger.DebugAsync("Identifying").ConfigureAwait(false); | await _gatewayLogger.DebugAsync("Identifying").ConfigureAwait(false); | ||||
| await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); | await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); | ||||
| } | } | ||||
| //Wait for READY | |||||
| await _connection.WaitAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| finally | finally | ||||
| { | { | ||||
| if (locked) | if (locked) | ||||
| _shardedClient.ReleaseIdentifyLock(); | _shardedClient.ReleaseIdentifyLock(); | ||||
| } | } | ||||
| //Wait for READY | |||||
| await _connection.WaitAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| private async Task OnDisconnectingAsync(Exception ex) | private async Task OnDisconnectingAsync(Exception ex) | ||||
| { | { | ||||
| @@ -554,36 +554,25 @@ namespace Discord.WebSocket | |||||
| case GatewayOpCode.InvalidSession: | case GatewayOpCode.InvalidSession: | ||||
| { | { | ||||
| await _gatewayLogger.DebugAsync("Received InvalidSession").ConfigureAwait(false); | await _gatewayLogger.DebugAsync("Received InvalidSession").ConfigureAwait(false); | ||||
| await _gatewayLogger.WarningAsync("Failed to resume previous session").ConfigureAwait(false); | |||||
| if (_sessionId != null) | |||||
| { | |||||
| // Failed to resume | |||||
| await _gatewayLogger.WarningAsync("Failed to resume previous session").ConfigureAwait(false); | |||||
| _sessionId = null; | |||||
| _lastSeq = 0; | |||||
| _sessionId = null; | |||||
| _lastSeq = 0; | |||||
| if (_shardedClient != null) | |||||
| if (_shardedClient != null) | |||||
| { | |||||
| await _shardedClient.AcquireIdentifyLockAsync(ShardId, _connection.CancelToken).ConfigureAwait(false); | |||||
| try | |||||
| { | { | ||||
| await _shardedClient.AcquireIdentifyLockAsync(ShardId, _connection.CancelToken).ConfigureAwait(false); | |||||
| try | |||||
| { | |||||
| await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); | |||||
| } | |||||
| finally | |||||
| { | |||||
| _shardedClient.ReleaseIdentifyLock(); | |||||
| } | |||||
| } | |||||
| else | |||||
| await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); | await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); | ||||
| } | |||||
| finally | |||||
| { | |||||
| _shardedClient.ReleaseIdentifyLock(); | |||||
| } | |||||
| } | } | ||||
| else | else | ||||
| { | |||||
| // Failed to identify | |||||
| await _gatewayLogger.WarningAsync("Failed to identify").ConfigureAwait(false); | |||||
| await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); | await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); | ||||
| } | |||||
| } | } | ||||
| break; | break; | ||||
| case GatewayOpCode.Reconnect: | case GatewayOpCode.Reconnect: | ||||
| @@ -643,7 +632,7 @@ namespace Discord.WebSocket | |||||
| } | } | ||||
| else if (_connection.CancelToken.IsCancellationRequested) | else if (_connection.CancelToken.IsCancellationRequested) | ||||
| return; | return; | ||||
| if (BaseConfig.AlwaysDownloadUsers) | if (BaseConfig.AlwaysDownloadUsers) | ||||
| _ = DownloadUsersAsync(Guilds.Where(x => x.IsAvailable && !x.HasAllMembers)); | _ = DownloadUsersAsync(Guilds.Where(x => x.IsAvailable && !x.HasAllMembers)); | ||||