@@ -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; | ||||