|
- 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);
- }
- }
- }
|