| @@ -9,7 +9,7 @@ namespace Discord | |||||
| internal sealed class Channels : AsyncCollection<Channel> | internal sealed class Channels : AsyncCollection<Channel> | ||||
| { | { | ||||
| public Channels(DiscordClient client, object writerLock) | public Channels(DiscordClient client, object writerLock) | ||||
| : base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) { } | |||||
| : base(client, writerLock) { } | |||||
| public Channel GetOrAdd(string id, string serverId, string recipientId = null) | public Channel GetOrAdd(string id, string serverId, string recipientId = null) | ||||
| => GetOrAdd(id, () => new Channel(_client, id, serverId, recipientId)); | => GetOrAdd(id, () => new Channel(_client, id, serverId, recipientId)); | ||||
| @@ -8,7 +8,7 @@ namespace Discord | |||||
| internal sealed class Users : AsyncCollection<User> | internal sealed class Users : AsyncCollection<User> | ||||
| { | { | ||||
| public Users(DiscordClient client, object writerLock) | public Users(DiscordClient client, object writerLock) | ||||
| : base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) { } | |||||
| : base(client, writerLock) { } | |||||
| private string GetKey(string userId, string serverId) | private string GetKey(string userId, string serverId) | ||||
| => User.GetId(userId, serverId); | => User.GetId(userId, serverId); | ||||
| @@ -13,7 +13,7 @@ namespace Discord | |||||
| private bool _isEnabled; | private bool _isEnabled; | ||||
| public Messages(DiscordClient client, object writerLock, bool isEnabled) | public Messages(DiscordClient client, object writerLock, bool isEnabled) | ||||
| : base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) | |||||
| : base(client, writerLock) | |||||
| { | { | ||||
| _isEnabled = isEnabled; | _isEnabled = isEnabled; | ||||
| } | } | ||||
| @@ -10,7 +10,7 @@ namespace Discord | |||||
| public Role VirtualEveryone { get; private set; } | public Role VirtualEveryone { get; private set; } | ||||
| public Roles(DiscordClient client, object writerLock) | public Roles(DiscordClient client, object writerLock) | ||||
| : base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) | |||||
| : base(client, writerLock) | |||||
| { | { | ||||
| VirtualEveryone = new Role(client, "Private", null); | VirtualEveryone = new Role(client, "Private", null); | ||||
| } | } | ||||
| @@ -9,7 +9,7 @@ namespace Discord | |||||
| internal sealed class Servers : AsyncCollection<Server> | internal sealed class Servers : AsyncCollection<Server> | ||||
| { | { | ||||
| public Servers(DiscordClient client, object writerLock) | public Servers(DiscordClient client, object writerLock) | ||||
| : base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) { } | |||||
| : base(client, writerLock) { } | |||||
| public Server GetOrAdd(string id) | public Server GetOrAdd(string id) | ||||
| => GetOrAdd(id, () => new Server(_client, id)); | => GetOrAdd(id, () => new Server(_client, id)); | ||||
| @@ -9,7 +9,7 @@ namespace Discord | |||||
| internal sealed class GlobalUsers : AsyncCollection<GlobalUser> | internal sealed class GlobalUsers : AsyncCollection<GlobalUser> | ||||
| { | { | ||||
| public GlobalUsers(DiscordClient client, object writerLock) | public GlobalUsers(DiscordClient client, object writerLock) | ||||
| : base(client, writerLock, x => x.OnCached(), x => x.OnUncached()) { } | |||||
| : base(client, writerLock) { } | |||||
| public GlobalUser GetOrAdd(string id) => GetOrAdd(id, () => new GlobalUser(_client, id)); | public GlobalUser GetOrAdd(string id) => GetOrAdd(id, () => new GlobalUser(_client, id)); | ||||
| } | } | ||||
| @@ -52,15 +52,12 @@ namespace Discord | |||||
| protected readonly DiscordClient _client; | protected readonly DiscordClient _client; | ||||
| protected readonly ConcurrentDictionary<string, TValue> _dictionary; | protected readonly ConcurrentDictionary<string, TValue> _dictionary; | ||||
| private readonly Action<TValue> _onCache, _onUncache; | |||||
| protected AsyncCollection(DiscordClient client, object writerLock, Action<TValue> onCache, Action<TValue> onUncache) | |||||
| protected AsyncCollection(DiscordClient client, object writerLock) | |||||
| { | { | ||||
| _client = client; | _client = client; | ||||
| _writerLock = writerLock; | _writerLock = writerLock; | ||||
| _dictionary = new ConcurrentDictionary<string, TValue>(); | _dictionary = new ConcurrentDictionary<string, TValue>(); | ||||
| _onCache = onCache; | |||||
| _onUncache = onUncache; | |||||
| } | } | ||||
| public TValue this[string key] | public TValue this[string key] | ||||
| @@ -88,7 +85,7 @@ namespace Discord | |||||
| result = _dictionary.GetOrAdd(key, newItem); | result = _dictionary.GetOrAdd(key, newItem); | ||||
| if (result == newItem) | if (result == newItem) | ||||
| { | { | ||||
| _onCache(result); | |||||
| result.Cache(); | |||||
| RaiseItemCreated(result); | RaiseItemCreated(result); | ||||
| } | } | ||||
| } | } | ||||
| @@ -103,7 +100,7 @@ namespace Discord | |||||
| TValue result; | TValue result; | ||||
| if (_dictionary.TryRemove(key, out result)) | if (_dictionary.TryRemove(key, out result)) | ||||
| { | { | ||||
| _onUncache(result); //TODO: If this object is accessed before OnRemoved finished firing, properties such as Server.Channels will have null elements | |||||
| result.Uncache(); //TODO: If this object is accessed before OnRemoved finished firing, properties such as Server.Channels will have null elements | |||||
| return result; | return result; | ||||
| } | } | ||||
| } | } | ||||