Files
Discord.Net/src/Discord.Net.WebSocket/Entities/Users/SocketGlobalUser.cs
2016-10-04 16:41:40 -03:00

58 lines
1.8 KiB
C#

using System.Diagnostics;
using Model = Discord.API.User;
namespace Discord.WebSocket
{
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
internal class SocketGlobalUser : SocketUser
{
public override bool IsBot { get; internal set; }
public override string Username { get; internal set; }
public override ushort DiscriminatorValue { get; internal set; }
public override string AvatarId { get; internal set; }
public SocketDMChannel DMChannel { get; internal set; }
internal override SocketGlobalUser GlobalUser => this;
internal override SocketPresence Presence { get; set; }
private readonly object _lockObj = new object();
private ushort _references;
private SocketGlobalUser(DiscordSocketClient discord, ulong id)
: base(discord, id)
{
}
internal static SocketGlobalUser Create(DiscordSocketClient discord, ClientState state, Model model)
{
var entity = new SocketGlobalUser(discord, model.Id);
entity.Update(state, model);
return entity;
}
internal void AddRef()
{
checked
{
lock (_lockObj)
_references++;
}
}
internal void RemoveRef(DiscordSocketClient discord)
{
lock (_lockObj)
{
if (--_references <= 0)
discord.RemoveUser(Id);
}
}
internal new SocketGlobalUser Clone() => MemberwiseClone() as SocketGlobalUser;
//Updates are only ever called from the gateway thread, thus threadsafe
internal override void Update(ClientState state, Model model)
{
base.Update(state, model);
}
}
}