From 25f148d5a87560cfe7b7a13f0d9f4f85d9dd07f8 Mon Sep 17 00:00:00 2001 From: RogueException Date: Sat, 27 Feb 2016 17:35:49 -0400 Subject: [PATCH] Several bugfixes --- src/Discord.Net.Audio/AudioClient.cs | 2 -- src/Discord.Net/DiscordClient.Events.cs | 8 +++---- src/Discord.Net/DiscordClient.cs | 41 ++++++++++++++++++++++++--------- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/Discord.Net.Audio/AudioClient.cs b/src/Discord.Net.Audio/AudioClient.cs index 2f21ce7f8..6951ff010 100644 --- a/src/Discord.Net.Audio/AudioClient.cs +++ b/src/Discord.Net.Audio/AudioClient.cs @@ -182,8 +182,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 5e9b5bc09..0d2eaa3fa 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 1b474ca5d..5d79e2483 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -33,6 +33,7 @@ namespace Discord private ConcurrentDictionary _privateChannels; //Key = RecipientId private Dictionary _regions; private Stopwatch _connectionStopwatch; + private bool _isProcessingReady; internal Logger Logger { get; } @@ -270,6 +271,7 @@ namespace Discord SendStatus(); OnReady(); } + _isProcessingReady = false; } /// Disconnects from the Discord server, canceling any pending requests. @@ -487,6 +489,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++) @@ -543,8 +546,15 @@ namespace Discord Logger.Info($"GUILD_AVAILABLE: {server.Path}"); if (data.Unavailable != false) - OnJoinedServer(server); - OnServerAvailable(server); + { + if (data.IsLarge) + GatewaySocket.SendRequestMembers(new ulong[] { data.Id }, "", 0); + else + { + OnJoinedServer(server); + //OnServerAvailable(server); + } + } } } break; @@ -574,9 +584,9 @@ namespace Discord else Logger.Info($"GUILD_UNAVAILABLE: {server.Path}"); - 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."); @@ -708,14 +718,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