BotSharp/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioMessageQueue.cs
2024-08-28 15:34:41 -05:00

38 lines
1 KiB
C#

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()
{
Console.WriteLine($"[{DateTime.UtcNow}] Complete queue");
_queue.Writer.TryComplete();
}
}
}