Browse Source

Fixed guilds not completing sync on user tokens

tags/1.0-rc
RogueException 8 years ago
parent
commit
8c5990d575
1 changed files with 11 additions and 13 deletions
  1. +11
    -13
      src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs

+ 11
- 13
src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs View File

@@ -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)


Loading…
Cancel
Save