Browse Source

Added virtual GuildAvailable and GuildUnavailable events on Connected, Ready and Disconnected events

tags/1.0-rc
RogueException 9 years ago
parent
commit
d9b5a4ddc9
3 changed files with 30 additions and 14 deletions
  1. +2
    -1
      src/Discord.Net/Audio/AudioClient.cs
  2. +24
    -10
      src/Discord.Net/DiscordSocketClient.cs
  3. +4
    -3
      src/Discord.Net/Entities/WebSocket/CachedGuild.cs

+ 2
- 1
src/Discord.Net/Audio/AudioClient.cs View File

@@ -90,6 +90,8 @@ namespace Discord.Audio
else else
await _audioLogger.WarningAsync($"Connection Closed").ConfigureAwait(false); await _audioLogger.WarningAsync($"Connection Closed").ConfigureAwait(false);
}; };

LatencyUpdated += async (old, val) => await _audioLogger.VerboseAsync($"Latency = {val} ms").ConfigureAwait(false);
} }


/// <inheritdoc /> /// <inheritdoc />
@@ -242,7 +244,6 @@ namespace Discord.Audio
{ {
int latency = (int)(Environment.TickCount - _heartbeatTime); int latency = (int)(Environment.TickCount - _heartbeatTime);
_heartbeatTime = 0; _heartbeatTime = 0;
await _audioLogger.VerboseAsync($"Latency = {latency} ms").ConfigureAwait(false);


int before = Latency; int before = Latency;
Latency = latency; Latency = latency;


+ 24
- 10
src/Discord.Net/DiscordSocketClient.cs View File

@@ -103,6 +103,12 @@ namespace Discord
await _gatewayLogger.WarningAsync($"Connection Closed").ConfigureAwait(false); await _gatewayLogger.WarningAsync($"Connection Closed").ConfigureAwait(false);
}; };


LeftGuild += async g => await _gatewayLogger.InfoAsync($"Left {g.Name}").ConfigureAwait(false);
JoinedGuild += async g => await _gatewayLogger.InfoAsync($"Joined {g.Name}").ConfigureAwait(false);
GuildAvailable += async g => await _gatewayLogger.VerboseAsync($"Connected to {g.Name}").ConfigureAwait(false);
GuildUnavailable += async g => await _gatewayLogger.VerboseAsync($"Disconnected from {g.Name}").ConfigureAwait(false);
LatencyUpdated += async (old, val) => await _gatewayLogger.VerboseAsync($"Latency = {val} ms").ConfigureAwait(false);

_voiceRegions = ImmutableDictionary.Create<string, VoiceRegion>(); _voiceRegions = ImmutableDictionary.Create<string, VoiceRegion>();
_largeGuilds = new ConcurrentQueue<ulong>(); _largeGuilds = new ConcurrentQueue<ulong>();
} }
@@ -236,6 +242,13 @@ namespace Discord
await _gatewayLogger.DebugAsync("Disconnecting - Clean Large Guilds").ConfigureAwait(false); await _gatewayLogger.DebugAsync("Disconnecting - Clean Large Guilds").ConfigureAwait(false);
while (_largeGuilds.TryDequeue(out guildId)) { } while (_largeGuilds.TryDequeue(out guildId)) { }


//Raise virtual GUILD_UNAVAILABLEs
foreach (var guild in DataStore.Guilds)
{
if (guild._available)
await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
}

ConnectionState = ConnectionState.Disconnected; ConnectionState = ConnectionState.Disconnected;
await _gatewayLogger.InfoAsync("Disconnected").ConfigureAwait(false); await _gatewayLogger.InfoAsync("Disconnected").ConfigureAwait(false);


@@ -504,7 +517,6 @@ namespace Discord
{ {
int latency = (int)(Environment.TickCount - _heartbeatTime); int latency = (int)(Environment.TickCount - _heartbeatTime);
_heartbeatTime = 0; _heartbeatTime = 0;
await _gatewayLogger.VerboseAsync($"Latency = {latency} ms").ConfigureAwait(false);


int before = Latency; int before = Latency;
Latency = latency; Latency = latency;
@@ -549,9 +561,11 @@ namespace Discord
for (int i = 0; i < data.Guilds.Length; i++) for (int i = 0; i < data.Guilds.Length; i++)
{ {
var model = data.Guilds[i]; var model = data.Guilds[i];
AddGuild(model, dataStore);
var guild = AddGuild(model, dataStore);
if (model.Unavailable == true) if (model.Unavailable == true)
unavailableGuilds++; unavailableGuilds++;
else
await _guildAvailableEvent.InvokeAsync(guild).ConfigureAwait(false);
} }
for (int i = 0; i < data.PrivateChannels.Length; i++) for (int i = 0; i < data.PrivateChannels.Length; i++)
AddPrivateChannel(data.PrivateChannels[i], dataStore); AddPrivateChannel(data.PrivateChannels[i], dataStore);
@@ -583,6 +597,14 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (RESUMED)").ConfigureAwait(false); await _gatewayLogger.DebugAsync("Received Dispatch (RESUMED)").ConfigureAwait(false);


var _ = _connectTask.TrySetResultAsync(true); //Signal the .Connect() call to complete var _ = _connectTask.TrySetResultAsync(true); //Signal the .Connect() call to complete

//Notify the client that these guilds are available again
foreach (var guild in DataStore.Guilds)
{
if (guild._available)
await _guildAvailableEvent.InvokeAsync(guild).ConfigureAwait(false);
}

await _gatewayLogger.InfoAsync("Resumed previous session").ConfigureAwait(false); await _gatewayLogger.InfoAsync("Resumed previous session").ConfigureAwait(false);
} }
return; return;
@@ -605,7 +627,6 @@ namespace Discord
guild = AddGuild(data, DataStore); guild = AddGuild(data, DataStore);
await SyncGuildsAsync().ConfigureAwait(false); await SyncGuildsAsync().ConfigureAwait(false);
await _joinedGuildEvent.InvokeAsync(guild).ConfigureAwait(false); await _joinedGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
await _gatewayLogger.InfoAsync($"Joined {data.Name}").ConfigureAwait(false);
} }
else else
{ {
@@ -624,10 +645,7 @@ namespace Discord
} }


if (data.Unavailable != true) if (data.Unavailable != true)
{
await _gatewayLogger.VerboseAsync($"Connected to {data.Name}").ConfigureAwait(false);
await _guildAvailableEvent.InvokeAsync(guild).ConfigureAwait(false); await _guildAvailableEvent.InvokeAsync(guild).ConfigureAwait(false);
}
} }
break; break;
case "GUILD_UPDATE": case "GUILD_UPDATE":
@@ -705,12 +723,8 @@ namespace Discord
member.User.RemoveRef(this); member.User.RemoveRef(this);


await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false); await _guildUnavailableEvent.InvokeAsync(guild).ConfigureAwait(false);
await _gatewayLogger.VerboseAsync($"Disconnected from {data.Name}").ConfigureAwait(false);
if (data.Unavailable != true) if (data.Unavailable != true)
{
await _leftGuildEvent.InvokeAsync(guild).ConfigureAwait(false); await _leftGuildEvent.InvokeAsync(guild).ConfigureAwait(false);
await _gatewayLogger.InfoAsync($"Left {data.Name}").ConfigureAwait(false);
}
else else
_unavailableGuilds++; _unavailableGuilds++;




+ 4
- 3
src/Discord.Net/Entities/WebSocket/CachedGuild.cs View File

@@ -26,8 +26,9 @@ namespace Discord
private ConcurrentHashSet<ulong> _channels; private ConcurrentHashSet<ulong> _channels;
private ConcurrentDictionary<ulong, CachedGuildUser> _members; private ConcurrentDictionary<ulong, CachedGuildUser> _members;
private ConcurrentDictionary<ulong, VoiceState> _voiceStates; private ConcurrentDictionary<ulong, VoiceState> _voiceStates;
internal bool _available;


public bool Available { get; private set; }
public bool Available => _available && Discord.ConnectionState == ConnectionState.Connected;
public int MemberCount { get; private set; } public int MemberCount { get; private set; }
public int DownloadedMemberCount { get; private set; } public int DownloadedMemberCount { get; private set; }
public AudioClient AudioClient { get; private set; } public AudioClient AudioClient { get; private set; }
@@ -62,8 +63,8 @@ namespace Discord
public void Update(ExtendedModel model, UpdateSource source, DataStore dataStore) public void Update(ExtendedModel model, UpdateSource source, DataStore dataStore)
{ {
if (source == UpdateSource.Rest && IsAttached) return; if (source == UpdateSource.Rest && IsAttached) return;
Available = !(model.Unavailable ?? false);
_available = !(model.Unavailable ?? false);
if (!Available) if (!Available)
{ {
if (_channels == null) if (_channels == null)


Loading…
Cancel
Save