You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.0 KiB
71 lines
2.0 KiB
using System.Threading.Channels;
|
|
|
|
namespace CoreAgent.WebSocketTransport.Interfaces;
|
|
|
|
/// <summary>
|
|
/// 消息通道接口,用于抽象消息队列操作
|
|
/// </summary>
|
|
/// <typeparam name="T">消息类型</typeparam>
|
|
public interface IMessageChannel<T> : IDisposable
|
|
{
|
|
/// <summary>
|
|
/// 获取通道容量
|
|
/// </summary>
|
|
int Capacity { get; }
|
|
|
|
/// <summary>
|
|
/// 获取当前队列长度
|
|
/// </summary>
|
|
int Count { get; }
|
|
|
|
/// <summary>
|
|
/// 获取通道是否已完成
|
|
/// </summary>
|
|
bool IsCompleted { get; }
|
|
|
|
/// <summary>
|
|
/// 异步添加消息到队列
|
|
/// </summary>
|
|
/// <param name="message">消息</param>
|
|
/// <param name="cancellationToken">取消令牌</param>
|
|
/// <returns>写入任务</returns>
|
|
ValueTask WriteAsync(T message, CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>
|
|
/// 尝试添加消息到队列(非阻塞)
|
|
/// </summary>
|
|
/// <param name="message">消息</param>
|
|
/// <returns>是否成功添加</returns>
|
|
bool TryWrite(T message);
|
|
|
|
/// <summary>
|
|
/// 异步读取消息
|
|
/// </summary>
|
|
/// <param name="cancellationToken">取消令牌</param>
|
|
/// <returns>消息</returns>
|
|
ValueTask<T> ReadAsync(CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>
|
|
/// 尝试读取消息(非阻塞)
|
|
/// </summary>
|
|
/// <param name="message">输出消息</param>
|
|
/// <returns>是否成功读取</returns>
|
|
bool TryRead(out T message);
|
|
|
|
/// <summary>
|
|
/// 等待消息可读
|
|
/// </summary>
|
|
/// <param name="cancellationToken">取消令牌</param>
|
|
/// <returns>是否有数据可读</returns>
|
|
ValueTask<bool> WaitToReadAsync(CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>
|
|
/// 完成通道,不再接受新消息
|
|
/// </summary>
|
|
void Complete();
|
|
|
|
/// <summary>
|
|
/// 清空队列中的所有消息
|
|
/// </summary>
|
|
void Clear();
|
|
}
|