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

38 lines
1 KiB
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;
2024-08-28 20:34:41 +00:00
2024-08-08 19:54:32 +00:00
public TwilioMessageQueue()
{
BoundedChannelOptions options = new(100)
{
FullMode = BoundedChannelFullMode.Wait
};
_queue = Channel.CreateBounded<CallerMessage>(options);
}
public async ValueTask EnqueueAsync(CallerMessage request)
{
2024-08-28 20:34:41 +00:00
if (request == null)
{
throw new ArgumentNullException(nameof(request));
}
2024-08-08 19:54:32 +00:00
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();
}
}
}