using Dpz.Core.Web.Jobs.Models.FileTransfer;
namespace Dpz.Core.Web.Jobs.Services.FileTransfer;
/// <summary>
/// 文件传输房间的内存存储接口。只保存连接元数据,不保存文件内容。
/// </summary>
public interface IFileTransferRoomStore
{
/// <summary>未配对房间的最大存活时间。</summary>
TimeSpan PendingRoomLifetime { get; }
/// <summary>创建房间并绑定发起方连接。</summary>
/// <param name="connectionId">发起方的 SignalR 连接 ID。</param>
/// <param name="joinUrl">接收方加入链接。</param>
/// <returns>包含房间对象和快照的操作结果。</returns>
FileTransferRoomResult CreateRoom(string connectionId, string joinUrl);
/// <summary>尝试接收方加入已有房间。</summary>
/// <param name="roomKey">房间 Key。</param>
/// <param name="connectionId">接收方的 SignalR 连接 ID。</param>
/// <param name="joinUrl">接收方加入链接。</param>
/// <returns>包含房间对象和快照的操作结果。</returns>
FileTransferOperationResult<FileTransferRoomResult> TryJoinRoom(
string roomKey,
string connectionId,
string joinUrl
);
/// <summary>尝试获取房间。</summary>
/// <param name="roomKey">房间 Key。</param>
/// <returns>房间对象操作结果。</returns>
FileTransferOperationResult<FileTransferRoom> TryGetRoom(string roomKey);
/// <summary>根据连接 ID 查找房间。</summary>
/// <param name="connectionId">SignalR 连接 ID。</param>
/// <returns>房间对象,未找到时返回 null。</returns>
FileTransferRoom? GetRoomByConnection(string connectionId);
/// <summary>移除指定连接关联的房间。</summary>
/// <param name="connectionId">SignalR 连接 ID。</param>
/// <returns>被移除的房间对象,未找到时返回 null。</returns>
FileTransferRoom? RemoveByConnection(string connectionId);
/// <summary>直接移除指定房间。</summary>
/// <param name="roomKey">房间 Key。</param>
/// <returns>被移除的房间对象,未找到时返回 null。</returns>
FileTransferRoom? RemoveRoom(string roomKey);
/// <summary>移除所有已过期的未配对房间。</summary>
/// <param name="now">当前时间。</param>
/// <returns>被移除的房间列表。</returns>
IReadOnlyList<FileTransferRoom> RemoveExpiredPendingRooms(DateTimeOffset now);
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
代码说明
这是一个 文件传输房间内存存储接口 的定义文件,用于管理文件传输会话的元数据。
核心功能
该接口 IFileTransferRoomStore 定义了一个文件传输房间管理系统,用于协调文件发送方和接收方之间的连接配对。
关键设计理念
- 只存储元数据:不保存实际文件内容,仅管理连接信息
- 房间机制:使用"房间"概念来匹配发送方和接收方
- 生命周期管理:对未配对的房间设置过期时间
主要方法说明
1. PendingRoomLifetime
- 未配对房间的最大存活时间配置
- 用于自动清理长期未匹配的房间
2. CreateRoom
- 发送方创建房间并获得房间标识
- 绑定发送方的 SignalR 连接 ID
- 返回包含加入 URL 的房间信息
3. TryJoinRoom
- 接收方通过房间 Key 加入房间
- 完成发送方与接收方的配对
- 返回操作结果(成功/失败)
4. TryGetRoom
- 根据房间 Key 查询房间信息
- 用于验证房间是否存在
5. GetRoomByConnection
- 通过 SignalR 连接 ID 反向查找房间
- 用于处理连接断开等事件
6. RemoveByConnection / RemoveRoom
- 根据连接 ID 或房间 Key 删除房间
- 用于清理已完成或取消的传输会话
7. RemoveExpiredPendingRooms
- 定期清理过期的未配对房间
- 释放系统资源,防止内存泄漏
应用场景
典型的文件传输流程:
- 发送方创建房间 → 获得分享链接
- 接收方通过链接加入房间 → 配对成功
- 双方通过 SignalR 实时传输文件
- 传输完成或断开后清理房间
这是一个基于 SignalR 的实时文件传输系统的核心接口定义。
AI 正在分析代码…
评论加载中...