diff --git a/src/Discord.Net.Audio/AudioClient.cs b/src/Discord.Net.Audio/AudioClient.cs index 00aacea12..5b075e52a 100644 --- a/src/Discord.Net.Audio/AudioClient.cs +++ b/src/Discord.Net.Audio/AudioClient.cs @@ -150,8 +150,6 @@ namespace Discord.Audio public async Task Disconnect() { await _taskManager.Stop(true).ConfigureAwait(false); - if (Config.EnableMultiserver) - ClientAPI.Token = null; } private async Task Cleanup() { diff --git a/src/Discord.Net/DiscordClient.Events.cs b/src/Discord.Net/DiscordClient.Events.cs index b05725f9b..05e0ca0ef 100644 --- a/src/Discord.Net/DiscordClient.Events.cs +++ b/src/Discord.Net/DiscordClient.Events.cs @@ -68,12 +68,12 @@ namespace Discord => OnEvent(JoinedServer, new ServerEventArgs(server)); private void OnLeftServer(Server server) => OnEvent(LeftServer, new ServerEventArgs(server)); - private void OnServerAvailable(Server server) - => OnEvent(ServerAvailable, new ServerEventArgs(server)); + /*private void OnServerAvailable(Server server) + => OnEvent(ServerAvailable, new ServerEventArgs(server));*/ private void OnServerUpdated(Server before, Server after) => OnEvent(ServerUpdated, new ServerUpdatedEventArgs(before, after)); - private void OnServerUnavailable(Server server) - => OnEvent(ServerUnavailable, new ServerEventArgs(server)); + /*private void OnServerUnavailable(Server server) + => OnEvent(ServerUnavailable, new ServerEventArgs(server));*/ private void OnUserBanned(User user) => OnEvent(UserBanned, new UserEventArgs(user)); diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 5fa94bbc2..2664b14ab 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -34,6 +34,7 @@ namespace Discord private ConcurrentDictionary _privateChannels; //Key = RecipientId private Dictionary _regions; private Stopwatch _connectionStopwatch; + private bool _isProcessingReady; internal Logger Logger { get; } @@ -271,6 +272,7 @@ namespace Discord SendStatus(); OnReady(); } + _isProcessingReady = false; } /// Disconnects from the Discord server, canceling any pending requests. @@ -482,6 +484,7 @@ namespace Discord //TODO: None of this is really threadsafe - should only replace the cache collections when they have been fully populated var data = e.Payload.ToObject(Serializer); + _isProcessingReady = true; int channelCount = 0; for (int i = 0; i < data.Guilds.Length; i++) @@ -534,8 +537,15 @@ namespace Discord Logger.Info($"GUILD_AVAILABLE: {server}"); if (data.Unavailable != false) - OnJoinedServer(server); - OnServerAvailable(server); + { + if (data.IsLarge) + GatewaySocket.SendRequestMembers(new ulong[] { data.Id }, "", 0); + else + { + OnJoinedServer(server); + //OnServerAvailable(server); + } + } } } break; @@ -565,9 +575,9 @@ namespace Discord else Logger.Info($"GUILD_UNAVAILABLE: {server}"); - OnServerUnavailable(server); - if (data.Unavailable != true) - OnLeftServer(server); + //OnServerUnavailable(server); + //if (data.Unavailable != true) + OnLeftServer(server); } else Logger.Warning("GUILD_DELETE referenced an unknown guild."); @@ -698,14 +708,23 @@ namespace Discord if (server.CurrentUserCount >= server.UserCount) //Finished downloading for there { - bool isConnectComplete = true; - foreach (var server2 in _servers.Select(x => x.Value)) + if (_isProcessingReady) + { + bool isConnectComplete = true; + foreach (var server2 in _servers.Select(x => x.Value)) + { + if (server2.CurrentUserCount < server2.UserCount) + isConnectComplete = false; + } + if (isConnectComplete) + EndConnect(); + } + else { - if (server2.CurrentUserCount < server2.UserCount) - isConnectComplete = false; + //TODO: Need to store if a server is available or not + OnJoinedServer(server); + //OnServerAvailable(server); } - if (isConnectComplete) - EndConnect(); } } else