BotSharp/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioMessageQueue.cs

33 lines
1,011 B
C#
Raw Normal View History

2024-08-08 19:54:32 +00:00
using BotSharp.Plugin.Twilio.Models;
using System.Threading.Channels;
namespace BotSharp.Plugin.Twilio.Services
{
public class TwilioMessageQueue
{
private readonly Channel<CallerMessage> _queue;
internal ChannelReader<CallerMessage> Reader => _queue.Reader;
public TwilioMessageQueue()
{
BoundedChannelOptions options = new(100)
{
FullMode = BoundedChannelFullMode.Wait
};
_queue = Channel.CreateBounded<CallerMessage>(options);
}
public async ValueTask EnqueueAsync(CallerMessage request)
{
if (request == null) throw new ArgumentNullException(nameof(request));
Console.WriteLine($"[{DateTime.UtcNow}] Enqueue {request}");
await _queue.Writer.WriteAsync(request);
}
internal void Stop()
{
2024-08-09 03:28:39 +00:00
Console.WriteLine($"[{DateTime.UtcNow}] Complete queue");
2024-08-08 19:54:32 +00:00
_queue.Writer.TryComplete();
}
}
}