chatsharp/ChatSharp/RequestManager.cs

44 lines
1.3 KiB
C#
Raw Normal View History

2015-07-07 19:16:52 +00:00
using System;
using System.Collections.Generic;
2015-07-07 19:16:52 +00:00
using System.Linq;
namespace ChatSharp
{
2015-08-01 01:06:22 +00:00
internal class RequestManager
{
2024-04-19 19:08:19 +00:00
internal Dictionary<string, RequestOperation> PendingOperations { get; } =
new Dictionary<string, RequestOperation>();
public void QueueOperation(string key, RequestOperation operation)
{
2024-04-19 05:12:08 +00:00
if (!PendingOperations.TryAdd(key, operation))
throw new InvalidOperationException("Operation is already pending.");
}
public RequestOperation PeekOperation(string key)
{
2022-04-12 20:14:48 +00:00
var realKey =
PendingOperations.Keys.FirstOrDefault(k => string.Equals(k, key, StringComparison.OrdinalIgnoreCase));
2015-03-11 03:56:21 +00:00
return PendingOperations[realKey];
}
public RequestOperation DequeueOperation(string key)
{
var operation = PendingOperations[key];
PendingOperations.Remove(key);
return operation;
}
}
2015-08-01 01:06:22 +00:00
internal class RequestOperation
{
public RequestOperation(object state, Action<RequestOperation> callback)
{
State = state;
Callback = callback;
}
2022-04-12 20:14:48 +00:00
public object State { get; set; }
public Action<RequestOperation> Callback { get; set; }
}
2022-04-12 20:14:48 +00:00
}