Browse Source

Use IMessageCache which can create itself

pull/1766/head
Daniel Baynton 4 years ago
parent
commit
89b902a9f6
6 changed files with 15 additions and 5 deletions
  1. +2
    -0
      src/Discord.Net.WebSocket/DiscordSocketClient.cs
  2. +2
    -0
      src/Discord.Net.WebSocket/DiscordSocketConfig.cs
  3. +1
    -2
      src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs
  4. +1
    -1
      src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs
  5. +3
    -1
      src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs
  6. +6
    -1
      src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs

+ 2
- 0
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

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


+ 2
- 0
src/Discord.Net.WebSocket/DiscordSocketConfig.cs View File

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


+ 1
- 2
src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs View File

@@ -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)
{ {


+ 1
- 1
src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs View File

@@ -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
- 1
src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs View File

@@ -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
- 1
src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs View File

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


Loading…
Cancel
Save