using Dpz.Core.Web.Jobs.Models.FileTransfer;

namespace Dpz.Core.Web.Jobs.Services.FileTransfer;

/// <summary>
/// 文件传输会话服务。
/// </summary>
public interface IFileTransferSessionService
{
    /// <summary>接收方加入房间。</summary>
    FileTransferOperationResult<FileTransferRoomResult> JoinRoom(
        string roomKey,
        string connectionId,
        string joinUrl
    );

    /// <summary>发送方发起一个文件传输要约。</summary>
    FileTransferOperationResult<FileTransferRecord> AddTransferOffer(
        string roomKey,
        string connectionId,
        FileTransferMetadata metadata
    );

    /// <summary>接收方接受传输要约。</summary>
    FileTransferOperationResult<FileTransferRecord> AcceptTransfer(
        string roomKey,
        string connectionId,
        string transferId
    );

    /// <summary>接收方拒绝传输要约。</summary>
    FileTransferOperationResult<FileTransferRecord> RejectTransfer(
        string roomKey,
        string connectionId,
        string transferId
    );

    /// <summary>暂停指定文件的传输。</summary>
    FileTransferOperationResult<FileTransferRecord> PauseTransfer(
        string roomKey,
        string connectionId,
        string transferId
    );

    /// <summary>恢复暂停的文件传输。</summary>
    FileTransferOperationResult<FileTransferRecord> ResumeTransfer(
        string roomKey,
        string connectionId,
        string transferId
    );

    /// <summary>取消指定文件的传输。</summary>
    FileTransferOperationResult<FileTransferRecord> CancelFileTransfer(
        string roomKey,
        string connectionId,
        string transferId
    );

    /// <summary>发送方发送一个文件分片。</summary>
    FileTransferOperationResult<FileTransferRoom> SendChunk(
        string roomKey,
        string connectionId,
        FileTransferChunk chunk
    );

    /// <summary>接收方确认分片(空调用,仅校验房间和权限)。</summary>
    FileTransferOperationResult<FileTransferRoom> AcknowledgeChunk(
        string roomKey,
        string connectionId
    );

    /// <summary>发送方通知传输完成。</summary>
    FileTransferOperationResult<FileTransferRecord> CompleteTransfer(
        string roomKey,
        string connectionId,
        string transferId
    );

    /// <summary>关闭房间,仅房间参与者可调用。</summary>
    FileTransferOperationResult<FileTransferRoom> CloseRoom(string roomKey, string connectionId);
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

代码说明

这是一个 文件传输会话服务的接口定义,使用 C# 编写,属于 Dpz.Core.Web.Jobs.Services.FileTransfer 命名空间。

接口概述

IFileTransferSessionService 定义了一个完整的 P2P 文件传输系统 的核心业务逻辑接口,实现了基于"房间"概念的文件传输管理。

主要功能模块

1. 房间管理

  • JoinRoom: 接收方通过房间密钥加入传输房间

2. 传输生命周期管理

  • AddTransferOffer: 发送方创建文件传输要约(发起传输)
  • AcceptTransfer: 接收方同意接收文件
  • RejectTransfer: 接收方拒绝接收文件
  • CompleteTransfer: 发送方标记传输完成

3. 传输控制

  • PauseTransfer: 暂停文件传输
  • ResumeTransfer: 恢复已暂停的传输
  • CancelFileTransfer: 取消文件传输

4. 数据传输

  • SendChunk: 发送方发送文件分片数据
  • AcknowledgeChunk: 接收方确认收到分片(用于校验权限)

5. 会话管理

  • CloseRoom: 关闭传输房间

方法签名特点

所有方法都包含以下通用参数:

  • roomKey: 房间唯一标识
  • connectionId: 连接标识(可能用于 WebSocket/SignalR 等实时连接)
  • 返回类型均为泛型结果类 FileTransferOperationResult<T>

使用场景

这个接口适用于实现类似 网页版文件传输工具(如 AirDrop、Snapdrop 等)的后端服务,支持:

  • 实时文件传输
  • 分片上传/下载
  • 传输状态管理
  • 权限验证
评论加载中...