1 using System.Collections.Generic;
3 using System.Threading.Tasks;
26 messageQueue =
new Queue<Message>();
27 nextMessage =
new TaskCompletionSource<object>();
31 public abstract bool Connected {
get; }
34 public abstract string BotMention {
get; }
44 messageQueue.Enqueue(message);
45 nextMessage.TrySetResult(null);
50 public abstract void Dispose();
53 public abstract Task<bool> Connect(CancellationToken cancellationToken);
56 public abstract Task Disconnect(CancellationToken cancellationToken);
59 public abstract Task<IReadOnlyList<Channel>> MapChannels(IEnumerable<ChatChannel> channels, CancellationToken cancellationToken);
62 public async Task<Message>
NextMessage(CancellationToken cancellationToken)
64 var cancelTcs =
new TaskCompletionSource<object>();
65 using (cancellationToken.Register(() => cancelTcs.SetCanceled()))
66 await Task.WhenAny(nextMessage.Task, cancelTcs.Task).ConfigureAwait(
false);
67 cancellationToken.ThrowIfCancellationRequested();
70 var result = messageQueue.Dequeue();
71 if (messageQueue.Count == 0)
72 nextMessage =
new TaskCompletionSource<object>();
78 public abstract Task SendMessage(ulong channelId,
string message, CancellationToken cancellationToken);
Use server authentication
Represents a message recieved by a IProvider
For interacting with a chat service
async Task< Message > NextMessage(CancellationToken cancellationToken)
Get a Task<TResult> resulting in the next Message the IProvider recieves or on a disconnect ...
TaskCompletionSource< object > nextMessage
TaskCompletionSource<TResult> that completes while messageQueue isn't empty
Provider()
Construct a Provider
readonly Queue< Message > messageQueue
Queue<T> of received Messages
void EnqueueMessage(Message message)
Queues a message for NextMessage(CancellationToken)