From 260ae1a19e90eedc98419649e6901273c54aada9 Mon Sep 17 00:00:00 2001 From: Daniel Baynton Date: Tue, 2 Feb 2021 17:14:22 +0000 Subject: [PATCH] Finish up by add methods to interfaces --- src/Discord.Net.WebSocket/DiscordSocketConfig.cs | 2 +- .../Entities/Channels/ISocketMessageChannel.cs | 1 + .../Entities/Channels/SocketDMChannel.cs | 4 ++-- .../Entities/Channels/SocketGroupChannel.cs | 3 ++- .../Entities/Channels/SocketTextChannel.cs | 3 ++- .../Entities/Messages/IMessageCache.cs | 2 +- src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs | 6 +++--- 7 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs index d681784d7..9d64d98e4 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs @@ -190,7 +190,7 @@ namespace Discord.WebSocket { WebSocketProvider = DefaultWebSocketProvider.Instance; UdpSocketProvider = DefaultUdpSocketProvider.Instance; - MessageCache = new MessageCache(); + MessageCache = new MessageCache(MessageCacheSize); } internal DiscordSocketConfig Clone() => MemberwiseClone() as DiscordSocketConfig; diff --git a/src/Discord.Net.WebSocket/Entities/Channels/ISocketMessageChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/ISocketMessageChannel.cs index b4625f799..4cdec57da 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/ISocketMessageChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/ISocketMessageChannel.cs @@ -17,6 +17,7 @@ namespace Discord.WebSocket /// A read-only collection of WebSocket-based messages. /// IReadOnlyCollection CachedMessages { get; } + IMessageCache MessageCache { get; } /// /// Sends a message to this message channel. diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs index cdb05cf79..d2404e6d9 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs @@ -25,7 +25,7 @@ namespace Discord.WebSocket /// public IReadOnlyCollection CachedMessages => _messages?.Messages ?? ImmutableArray.Create(); - + public IMessageCache MessageCache => _messages; /// /// Gets a collection that is the current logged-in user and the recipient. /// @@ -36,7 +36,7 @@ namespace Discord.WebSocket { Recipient = recipient; recipient.GlobalUser.AddRef(); - _messages = discord.MessageCache.CreateMessageCache(); + _messages = discord.MessageCache.CreateMessageCache(discord.MessageCacheSize); } internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, Model model) { diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs index 876d1b621..3b8b2b4d7 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs @@ -31,6 +31,7 @@ namespace Discord.WebSocket /// public IReadOnlyCollection CachedMessages => _messages?.Messages ?? ImmutableArray.Create(); + public IMessageCache MessageCache => _messages; public new IReadOnlyCollection Users => _users.ToReadOnlyCollection(); public IReadOnlyCollection Recipients => _users.Select(x => x.Value).Where(x => x.Id != Discord.CurrentUser.Id).ToReadOnlyCollection(() => _users.Count - 1); @@ -38,7 +39,7 @@ namespace Discord.WebSocket internal SocketGroupChannel(DiscordSocketClient discord, ulong id) : base(discord, id) { - _messages = discord.MessageCache.CreateMessageCache(); + _messages = discord.MessageCache.CreateMessageCache(discord.MessageCacheSize); _voiceStates = new ConcurrentDictionary(ConcurrentHashSet.DefaultConcurrencyLevel, 5); _users = new ConcurrentDictionary(ConcurrentHashSet.DefaultConcurrencyLevel, 5); } diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs index 3f570c850..4bd305cb7 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs @@ -44,6 +44,7 @@ namespace Discord.WebSocket public string Mention => MentionUtils.MentionChannel(Id); /// public IReadOnlyCollection CachedMessages => _messages?.Messages ?? ImmutableArray.Create(); + public IMessageCache MessageCache => _messages; /// public override IReadOnlyCollection Users => Guild.Users.Where(x => Permissions.GetValue( @@ -54,7 +55,7 @@ namespace Discord.WebSocket : base(discord, id, guild) { if (Discord.MessageCacheSize > 0) - _messages = discord.MessageCache.CreateMessageCache(); + _messages = discord.MessageCache.CreateMessageCache(discord.MessageCacheSize); } internal new static SocketTextChannel Create(SocketGuild guild, ClientState state, Model model) { diff --git a/src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs b/src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs index c64eee1b7..997b4906f 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs @@ -5,7 +5,7 @@ namespace Discord { public interface IMessageCache { - public IMessageCache CreateMessageCache(); + public IMessageCache CreateMessageCache(int size); public IReadOnlyCollection Messages { get; } diff --git a/src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs b/src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs index 96215a1ce..3cd95e46c 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs @@ -14,11 +14,11 @@ namespace Discord.WebSocket public IReadOnlyCollection Messages => _messages.ToReadOnlyCollection(); - public IMessageCache CreateMessageCache() => new MessageCache(); + public IMessageCache CreateMessageCache(int size) => new MessageCache(size); - public MessageCache() + public MessageCache(int size) { - _size = 50; // todo: get this from the existing DiscordSocketConfig value. + _size = size; _messages = new ConcurrentDictionary(ConcurrentHashSet.DefaultConcurrencyLevel, (int)(_size * 1.05)); _orderedMessages = new ConcurrentQueue(); }