Browse Source

default model maps

v4/state-cache-providers
Quin Lynch 3 years ago
parent
commit
157063c7ed
6 changed files with 33 additions and 24 deletions
  1. +28
    -19
      src/Discord.Net.WebSocket/ClientStateManager.Experiment.cs
  2. +1
    -1
      src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
  3. +1
    -1
      src/Discord.Net.WebSocket/Entities/Users/SocketPresence.cs
  4. +1
    -1
      src/Discord.Net.WebSocket/Entities/Users/SocketSelfUser.cs
  5. +1
    -1
      src/Discord.Net.WebSocket/Entities/Users/SocketThreadUser.cs
  6. +1
    -1
      src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs

+ 28
- 19
src/Discord.Net.WebSocket/ClientStateManager.Experiment.cs View File

@@ -267,26 +267,15 @@ namespace Discord.WebSocket
private SemaphoreSlim _memberStoreLock;
private SemaphoreSlim _threadMemberLock;

private void CreateStores()
private readonly Dictionary<Type, Func<object>> _defaultModelFactory = new()
{
UserStore = new ReferenceStore<SocketGlobalUser, IUserModel, ulong, IUser>(
_cacheProvider,
m => SocketGlobalUser.Create(_client, m),
async (id, options) => await _client.Rest.GetUserAsync(id, options).ConfigureAwait(false),
AllowSyncWaits);
{ typeof(IUserModel), () => new SocketUser.CacheModel() },
{ typeof(IMemberModel), () => new SocketGuildUser.CacheModel() },
{ typeof(ICurrentUserModel), () => new SocketSelfUser.CacheModel() },
{ typeof(IThreadMemberModel), () => new SocketThreadUser.CacheModel() },
{ typeof(IPresenceModel), () => new SocketPresence.CacheModel() },
};

PresenceStore = new ReferenceStore<SocketPresence, IPresenceModel, ulong, IPresence>(
_cacheProvider,
m => SocketPresence.Create(_client, m),
(id, options) => Task.FromResult<IPresence>(null),
AllowSyncWaits);

_memberStores = new();
_threadMemberStores = new();

_threadMemberLock = new(1, 1);
_memberStoreLock = new(1,1);
}

public void ClearDeadReferences()
{
@@ -374,7 +363,27 @@ namespace Discord.WebSocket
return (TModel)Activator.CreateInstance(type);
}
else
return new TFallback();
return _defaultModelFactory.TryGetValue(typeof(TModel), out var m) ? (TModel)m() : new TFallback();
}
private void CreateStores()
{
UserStore = new ReferenceStore<SocketGlobalUser, IUserModel, ulong, IUser>(
_cacheProvider,
m => SocketGlobalUser.Create(_client, m),
async (id, options) => await _client.Rest.GetUserAsync(id, options).ConfigureAwait(false),
AllowSyncWaits);

PresenceStore = new ReferenceStore<SocketPresence, IPresenceModel, ulong, IPresence>(
_cacheProvider,
m => SocketPresence.Create(_client, m),
(id, options) => Task.FromResult<IPresence>(null),
AllowSyncWaits);

_memberStores = new();
_threadMemberStores = new();

_threadMemberLock = new(1, 1);
_memberStoreLock = new(1,1);
}
}
}

+ 1
- 1
src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs View File

@@ -259,7 +259,7 @@ namespace Discord.WebSocket

#region Cache

private class CacheModel : MemberModel
internal new class CacheModel : MemberModel
{
public ulong Id { get; set; }
public string Nickname { get; set; }


+ 1
- 1
src/Discord.Net.WebSocket/Entities/Users/SocketPresence.cs View File

@@ -127,7 +127,7 @@ namespace Discord.WebSocket
}

#region Cache
private class CacheModel : Model
internal class CacheModel : Model
{
public UserStatus Status { get; set; }



+ 1
- 1
src/Discord.Net.WebSocket/Entities/Users/SocketSelfUser.cs View File

@@ -97,7 +97,7 @@ namespace Discord.WebSocket
}

#region Cache
private class CacheModel : Model
internal new class CacheModel : Model
{
public bool? IsVerified { get; set; }



+ 1
- 1
src/Discord.Net.WebSocket/Entities/Users/SocketThreadUser.cs View File

@@ -258,7 +258,7 @@ namespace Discord.WebSocket
public static explicit operator SocketGuildUser(SocketThreadUser user) => user.GuildUser.Value;

#region Cache
private class CacheModel : Model
internal new class CacheModel : Model
{
public ulong Id { get; set; }
public ulong? ThreadId { get; set; }


+ 1
- 1
src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs View File

@@ -124,7 +124,7 @@ namespace Discord.WebSocket
internal SocketUser Clone() => MemberwiseClone() as SocketUser;

#region Cache
private class CacheModel : Model
internal class CacheModel : Model
{
public string Username { get; set; }



Loading…
Cancel
Save