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.

52 lines
1.7 KiB

1 month ago
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using AuroraDesk.Core.Entities;
namespace AuroraDesk.Core.Interfaces;
/// <summary>
/// 管理 Plink 会话的服务接口,支持多客户端并行连接与实时消息流
/// </summary>
public interface IPlinkSessionService : IDisposable
{
/// <summary>
/// 创建并启动一个新的 Plink 会话
/// </summary>
/// <param name="options">会话参数</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>会话信息</returns>
Task<PlinkSessionInfo> StartSessionAsync(PlinkSessionOptions options, CancellationToken cancellationToken = default);
/// <summary>
/// 停止并释放指定会话
/// </summary>
/// <param name="sessionId">会话标识</param>
Task StopSessionAsync(Guid sessionId);
/// <summary>
/// 向指定会话发送命令或文本
/// </summary>
/// <param name="sessionId">会话标识</param>
/// <param name="payload">要发送的内容</param>
/// <param name="cancellationToken">取消令牌</param>
Task<bool> SendAsync(Guid sessionId, string payload, CancellationToken cancellationToken = default);
/// <summary>
/// 获取所有当前会话的快照
/// </summary>
IReadOnlyCollection<PlinkSessionInfo> GetSessions();
/// <summary>
/// 监听指定会话的状态变化
/// </summary>
IObservable<PlinkSessionStatus> ObserveStatus(Guid sessionId);
/// <summary>
/// 监听指定会话的消息流(包含发送与接收)
/// </summary>
IObservable<PlinkMessage> ObserveMessages(Guid sessionId);
}