Fixed guilds not completing sync on user tokens
This commit is contained in:
@@ -5,6 +5,7 @@ using System;
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@@ -29,7 +30,6 @@ namespace Discord.WebSocket
|
|||||||
private ConcurrentDictionary<ulong, SocketGuildUser> _members;
|
private ConcurrentDictionary<ulong, SocketGuildUser> _members;
|
||||||
private ConcurrentDictionary<ulong, SocketRole> _roles;
|
private ConcurrentDictionary<ulong, SocketRole> _roles;
|
||||||
private ConcurrentDictionary<ulong, SocketVoiceState> _voiceStates;
|
private ConcurrentDictionary<ulong, SocketVoiceState> _voiceStates;
|
||||||
private ConcurrentDictionary<ulong, PresenceModel> _cachedPresences;
|
|
||||||
private ImmutableArray<Emoji> _emojis;
|
private ImmutableArray<Emoji> _emojis;
|
||||||
private ImmutableArray<string> _features;
|
private ImmutableArray<string> _features;
|
||||||
internal bool _available;
|
internal bool _available;
|
||||||
@@ -127,20 +127,17 @@ namespace Discord.WebSocket
|
|||||||
members.TryAdd(member.Id, member);
|
members.TryAdd(member.Id, member);
|
||||||
}
|
}
|
||||||
DownloadedMemberCount = members.Count;
|
DownloadedMemberCount = members.Count;
|
||||||
}
|
|
||||||
var cachedPresences = new ConcurrentDictionary<ulong, PresenceModel>(ConcurrentHashSet.DefaultConcurrencyLevel, (int)(model.Presences.Length * 1.05));
|
|
||||||
{
|
|
||||||
for (int i = 0; i < model.Presences.Length; i++)
|
for (int i = 0; i < model.Presences.Length; i++)
|
||||||
{
|
{
|
||||||
SocketGuildUser member;
|
SocketGuildUser member;
|
||||||
if (_members.TryGetValue(model.Presences[i].User.Id, out member))
|
if (members.TryGetValue(model.Presences[i].User.Id, out member))
|
||||||
member.Update(state, model.Presences[i]);
|
member.Update(state, model.Presences[i]);
|
||||||
else
|
else
|
||||||
cachedPresences.TryAdd(model.Presences[i].User.Id, model.Presences[i]);
|
Debug.Assert(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_members = members;
|
_members = members;
|
||||||
_cachedPresences = cachedPresences;
|
|
||||||
MemberCount = model.MemberCount;
|
MemberCount = model.MemberCount;
|
||||||
|
|
||||||
var voiceStates = new ConcurrentDictionary<ulong, SocketVoiceState>(ConcurrentHashSet.DefaultConcurrencyLevel, (int)(model.VoiceStates.Length * 1.05));
|
var voiceStates = new ConcurrentDictionary<ulong, SocketVoiceState>(ConcurrentHashSet.DefaultConcurrencyLevel, (int)(model.VoiceStates.Length * 1.05));
|
||||||
@@ -216,20 +213,21 @@ namespace Discord.WebSocket
|
|||||||
members.TryAdd(member.Id, member);
|
members.TryAdd(member.Id, member);
|
||||||
}
|
}
|
||||||
DownloadedMemberCount = members.Count;
|
DownloadedMemberCount = members.Count;
|
||||||
}
|
|
||||||
var cachedPresences = new ConcurrentDictionary<ulong, PresenceModel>(ConcurrentHashSet.DefaultConcurrencyLevel, (int)(model.Presences.Length * 1.05));
|
|
||||||
{
|
|
||||||
for (int i = 0; i < model.Presences.Length; i++)
|
for (int i = 0; i < model.Presences.Length; i++)
|
||||||
{
|
{
|
||||||
SocketGuildUser member;
|
SocketGuildUser member;
|
||||||
if (_members.TryGetValue(model.Presences[i].User.Id, out member))
|
if (members.TryGetValue(model.Presences[i].User.Id, out member))
|
||||||
member.Update(state, model.Presences[i]);
|
member.Update(state, model.Presences[i]);
|
||||||
else
|
else
|
||||||
cachedPresences.TryAdd(model.Presences[i].User.Id, model.Presences[i]);
|
Debug.Assert(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_members = members;
|
_members = members;
|
||||||
_cachedPresences = cachedPresences;
|
|
||||||
|
var _ = _syncPromise.TrySetResultAsync(true);
|
||||||
|
if (!model.Large)
|
||||||
|
_ = _downloaderPromise.TrySetResultAsync(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Update(ClientState state, EmojiUpdateModel model)
|
internal void Update(ClientState state, EmojiUpdateModel model)
|
||||||
|
|||||||
Reference in New Issue
Block a user