| @@ -66,6 +66,7 @@ namespace Discord.WebSocket | |||||
| //From DiscordSocketConfig | //From DiscordSocketConfig | ||||
| internal int TotalShards { get; private set; } | internal int TotalShards { get; private set; } | ||||
| internal int MessageCacheSize { get; private set; } | internal int MessageCacheSize { get; private set; } | ||||
| internal IMessageCache MessageCache { get; private set; } | |||||
| internal int LargeThreshold { get; private set; } | internal int LargeThreshold { get; private set; } | ||||
| internal ClientState State { get; private set; } | internal ClientState State { get; private set; } | ||||
| internal UdpSocketProvider UdpSocketProvider { get; private set; } | internal UdpSocketProvider UdpSocketProvider { get; private set; } | ||||
| @@ -131,6 +132,7 @@ namespace Discord.WebSocket | |||||
| ShardId = config.ShardId ?? 0; | ShardId = config.ShardId ?? 0; | ||||
| TotalShards = config.TotalShards ?? 1; | TotalShards = config.TotalShards ?? 1; | ||||
| MessageCacheSize = config.MessageCacheSize; | MessageCacheSize = config.MessageCacheSize; | ||||
| MessageCache = config.MessageCache; | |||||
| LargeThreshold = config.LargeThreshold; | LargeThreshold = config.LargeThreshold; | ||||
| UdpSocketProvider = config.UdpSocketProvider; | UdpSocketProvider = config.UdpSocketProvider; | ||||
| WebSocketProvider = config.WebSocketProvider; | WebSocketProvider = config.WebSocketProvider; | ||||
| @@ -57,6 +57,8 @@ namespace Discord.WebSocket | |||||
| /// </summary> | /// </summary> | ||||
| public int MessageCacheSize { get; set; } = 0; | public int MessageCacheSize { get; set; } = 0; | ||||
| public IMessageCache MessageCache { get; set; } = null; | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets or sets the max number of users a guild may have for offline users to be included in the READY | /// Gets or sets the max number of users a guild may have for offline users to be included in the READY | ||||
| /// packet. The maximum value allowed is 250. | /// packet. The maximum value allowed is 250. | ||||
| @@ -36,8 +36,7 @@ namespace Discord.WebSocket | |||||
| { | { | ||||
| Recipient = recipient; | Recipient = recipient; | ||||
| recipient.GlobalUser.AddRef(); | recipient.GlobalUser.AddRef(); | ||||
| if (Discord.MessageCacheSize > 0) | |||||
| _messages = new MessageCache(Discord); | |||||
| _messages = discord.MessageCache.CreateMessageCache(discord); | |||||
| } | } | ||||
| internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, Model model) | internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, Model model) | ||||
| { | { | ||||
| @@ -54,7 +54,7 @@ namespace Discord.WebSocket | |||||
| : base(discord, id, guild) | : base(discord, id, guild) | ||||
| { | { | ||||
| if (Discord.MessageCacheSize > 0) | if (Discord.MessageCacheSize > 0) | ||||
| _messages = new MessageCache(Discord); | |||||
| _messages = discord.MessageCache.CreateMessageCache(discord); | |||||
| } | } | ||||
| internal new static SocketTextChannel Create(SocketGuild guild, ClientState state, Model model) | internal new static SocketTextChannel Create(SocketGuild guild, ClientState state, Model model) | ||||
| { | { | ||||
| @@ -3,8 +3,10 @@ using Discord.WebSocket; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| internal interface IMessageCache | |||||
| public interface IMessageCache | |||||
| { | { | ||||
| public IMessageCache CreateMessageCache(DiscordSocketClient discord); | |||||
| public IReadOnlyCollection<SocketMessage> Messages { get; } | public IReadOnlyCollection<SocketMessage> Messages { get; } | ||||
| public void Add(SocketMessage message); | public void Add(SocketMessage message); | ||||
| @@ -6,7 +6,7 @@ using System.Linq; | |||||
| namespace Discord.WebSocket | namespace Discord.WebSocket | ||||
| { | { | ||||
| internal class MessageCache : IMessageCache | |||||
| public class MessageCache : IMessageCache | |||||
| { | { | ||||
| private readonly ConcurrentDictionary<ulong, SocketMessage> _messages; | private readonly ConcurrentDictionary<ulong, SocketMessage> _messages; | ||||
| private readonly ConcurrentQueue<ulong> _orderedMessages; | private readonly ConcurrentQueue<ulong> _orderedMessages; | ||||
| @@ -14,6 +14,11 @@ namespace Discord.WebSocket | |||||
| public IReadOnlyCollection<SocketMessage> Messages => _messages.ToReadOnlyCollection(); | public IReadOnlyCollection<SocketMessage> Messages => _messages.ToReadOnlyCollection(); | ||||
| public IMessageCache CreateMessageCache(DiscordSocketClient discord) | |||||
| { | |||||
| return new MessageCache(discord); | |||||
| } | |||||
| public MessageCache(DiscordSocketClient discord) | public MessageCache(DiscordSocketClient discord) | ||||
| { | { | ||||
| _size = discord.MessageCacheSize; | _size = discord.MessageCacheSize; | ||||