58 lines
1.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|