Increment globaluser refs on private channel creation

This commit is contained in:
RogueException
2017-05-04 13:14:35 -03:00
parent bd5ec0a29a
commit 4a128b326b
3 changed files with 14 additions and 10 deletions

View File

@@ -55,26 +55,28 @@ namespace Discord.WebSocket
{ {
_channels[channel.Id] = channel; _channels[channel.Id] = channel;
if (channel is SocketDMChannel dmChannel) switch (channel)
_dmChannels[dmChannel.Recipient.Id] = dmChannel;
else
{ {
if (channel is SocketGroupChannel groupChannel) case SocketDMChannel dmChannel:
_dmChannels[dmChannel.Recipient.Id] = dmChannel;
break;
case SocketGroupChannel groupChannel:
_groupChannels.TryAdd(groupChannel.Id); _groupChannels.TryAdd(groupChannel.Id);
break;
} }
} }
internal SocketChannel RemoveChannel(ulong id) internal SocketChannel RemoveChannel(ulong id)
{ {
if (_channels.TryRemove(id, out SocketChannel channel)) if (_channels.TryRemove(id, out SocketChannel channel))
{ {
if (channel is SocketDMChannel dmChannel) switch (channel)
{ {
_dmChannels.TryRemove(dmChannel.Recipient.Id, out SocketDMChannel ignored); case SocketDMChannel dmChannel:
} _dmChannels.TryRemove(dmChannel.Recipient.Id, out var ignored);
else break;
{ case SocketGroupChannel groupChannel:
if (channel is SocketGroupChannel groupChannel)
_groupChannels.TryRemove(id); _groupChannels.TryRemove(id);
break;
} }
return channel; return channel;
} }

View File

@@ -24,6 +24,7 @@ namespace Discord.WebSocket
: base(discord, id) : base(discord, id)
{ {
Recipient = recipient; Recipient = recipient;
recipient.GlobalUser.AddRef();
if (Discord.MessageCacheSize > 0) if (Discord.MessageCacheSize > 0)
_messages = new MessageCache(Discord, this); _messages = new MessageCache(Discord, this);
} }

View File

@@ -131,6 +131,7 @@ namespace Discord.WebSocket
else else
{ {
var privateUser = SocketGroupUser.Create(this, Discord.State, model); var privateUser = SocketGroupUser.Create(this, Discord.State, model);
privateUser.GlobalUser.AddRef();
_users[privateUser.Id] = privateUser; _users[privateUser.Id] = privateUser;
return privateUser; return privateUser;
} }