Files
YooAssetScene/Assets/YooAsset/Runtime/DownloadSystem/DownloadSystemDefine.cs
T
2026-01-16 10:28:01 +08:00

350 lines
10 KiB
C#

using System.Collections.Generic;
namespace YooAsset
{
/// <summary>
/// 导入的资源包信息
/// </summary>
public struct ImportBundleInfo
{
/// <summary>
/// 本地文件路径
/// </summary>
public string FilePath;
/// <summary>
/// 资源包名称
/// </summary>
public string BundleName;
/// <summary>
/// 资源包GUID
/// </summary>
public string BundleGUID;
}
/// <summary>
/// 下载请求状态
/// </summary>
internal enum EDownloadRequestStatus
{
/// <summary>
/// 未开始
/// </summary>
None,
/// <summary>
/// 进行中
/// </summary>
Running,
/// <summary>
/// 已成功
/// </summary>
Succeed,
/// <summary>
/// 已失败
/// </summary>
Failed,
/// <summary>
/// 已中止
/// </summary>
Aborted,
}
/// <summary>
/// 文件下载请求参数
/// </summary>
/// <remarks>
/// 用于将下载内容保存到本地文件的请求配置。
/// 支持断点续传和追加写入模式。
/// </remarks>
internal struct DownloadFileRequestArgs
{
/// <summary>
/// 请求地址
/// </summary>
public readonly string URL;
/// <summary>
/// 响应的超时时间(单位:秒)
/// </summary>
/// <remarks>
/// 当 Timeout 设置为 0 时,不应用超时。
/// 设置的超时值可能应用于Android上的每个URL重定向,这可能会导致响应时间增加。
/// </remarks>
public readonly int Timeout;
/// <summary>
/// 看门狗超时时间(单位:秒)
/// </summary>
/// <remarks>
/// 用于监控下载任务的数据接收情况。
/// 规则说明:
/// 1. 当设置值为 0 时,表示禁用看门狗监控。
/// 2. 每次接收到下载数据时,看门狗计时器会重置。
/// 3. 若在设定的时间范围内未收到任何数据,任务将被自动终止。
/// </remarks>
public readonly int WatchdogTime;
/// <summary>
/// 文件保存路径
/// </summary>
public readonly string SavePath;
/// <summary>
/// 是否追加写入文件
/// </summary>
/// <remarks>
/// 配合 ResumeFromBytes 使用,用于断点续传场景。
/// </remarks>
public readonly bool AppendToFile;
/// <summary>
/// 中止请求时是否删除目标文件
/// </summary>
public readonly bool RemoveFileOnAbort;
/// <summary>
/// 断点续传的起始字节(小于等于 0 表示不启用)
/// </summary>
/// <remarks>
/// 推荐由后端自动设置 Range 请求头:"bytes={ResumeFromBytes}-"。
/// </remarks>
public readonly long ResumeFromBytes;
/// <summary>
/// 自定义请求头(可选)
/// </summary>
public Dictionary<string, string> Headers;
/// <summary>
/// 构造文件下载请求参数
/// </summary>
public DownloadFileRequestArgs(
string url,
string savePath,
int timeout,
int watchdogTime,
bool appendToFile = false,
bool removeFileOnAbort = true,
long resumeFromBytes = 0)
{
URL = url;
SavePath = savePath;
Timeout = timeout;
WatchdogTime = watchdogTime;
AppendToFile = appendToFile;
RemoveFileOnAbort = removeFileOnAbort;
ResumeFromBytes = resumeFromBytes;
Headers = null;
}
/// <summary>
/// 添加请求头数据
/// </summary>
public void AddRequestHeader(string name, string value)
{
if (Headers == null)
Headers = new Dictionary<string, string>(10);
Headers.Add(name, value);
}
}
/// <summary>
/// 数据下载请求参数(通用)
/// </summary>
/// <remarks>
/// 用于下载到内存的请求配置。
/// 可用于字节数组(bytes)或文本(text)下载。
/// </remarks>
internal struct DownloadDataRequestArgs
{
/// <summary>
/// 请求地址
/// </summary>
public readonly string URL;
/// <summary>
/// 响应的超时时间(单位:秒)
/// </summary>
/// <remarks>
/// 当 Timeout 设置为 0 时,不应用超时。
/// 设置的超时值可能应用于Android上的每个URL重定向,这可能会导致响应时间增加。
/// </remarks>
public readonly int Timeout;
/// <summary>
/// 看门狗超时时间(单位:秒)
/// </summary>
/// <remarks>
/// 用于监控下载任务的数据接收情况。
/// 规则说明:
/// 1. 当设置值为 0 时,表示禁用看门狗监控。
/// 2. 每次接收到下载数据时,看门狗计时器会重置。
/// 3. 若在设定的时间范围内未收到任何数据,任务将被自动终止。
/// </remarks>
public readonly int WatchdogTime;
/// <summary>
/// 自定义请求头(可选)
/// </summary>
public Dictionary<string, string> Headers;
/// <summary>
/// 构造数据下载请求参数
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="options">通用请求参数</param>
public DownloadDataRequestArgs(string url, int timeout, int watchdogTime)
{
URL = url;
Timeout = timeout;
WatchdogTime = watchdogTime;
Headers = null;
}
/// <summary>
/// 添加请求头数据
/// </summary>
public void AddRequestHeader(string name, string value)
{
if (Headers == null)
Headers = new Dictionary<string, string>(10);
Headers.Add(name, value);
}
}
/// <summary>
/// AssetBundle 下载请求参数
/// </summary>
/// <remarks>
/// 用于下载并加载 Unity AssetBundle 的请求配置。
/// 支持 Unity 内置缓存机制和 CRC 校验。
/// </remarks>
internal struct DownloadAssetBundleRequestArgs
{
/// <summary>
/// 请求地址
/// </summary>
public readonly string URL;
/// <summary>
/// 响应的超时时间(单位:秒)
/// </summary>
/// <remarks>
/// 当 Timeout 设置为 0 时,不应用超时。
/// 设置的超时值可能应用于Android上的每个URL重定向,这可能会导致响应时间增加。
/// </remarks>
public readonly int Timeout;
/// <summary>
/// 看门狗超时时间(单位:秒)
/// </summary>
/// <remarks>
/// 用于监控下载任务的数据接收情况。
/// 规则说明:
/// 1. 当设置值为 0 时,表示禁用看门狗监控。
/// 2. 每次接收到下载数据时,看门狗计时器会重置。
/// 3. 若在设定的时间范围内未收到任何数据,任务将被自动终止。
/// </remarks>
public readonly int WatchdogTime;
/// <summary>
/// 禁用 Unity 的网络缓存
/// </summary>
public readonly bool DisableUnityWebCache;
/// <summary>
/// AssetBundle 文件哈希(用于 UnityWebRequest 的缓存)
/// </summary>
/// <remarks>
/// 仅当 DisableUnityWebCache 为 false 时需要。
/// </remarks>
public readonly string FileHash;
/// <summary>
/// Unity CRC 校验值
/// </summary>
public readonly uint UnityCRC;
/// <summary>
/// 自定义请求头(可选)
/// </summary>
public Dictionary<string, string> Headers;
/// <summary>
/// 构造 AssetBundle 下载请求参数
/// </summary>
public DownloadAssetBundleRequestArgs(
string url,
int timeout,
int watchdogTime,
bool disableUnityWebCache = true,
string fileHash = null,
uint unityCrc = 0)
{
URL = url;
Timeout = timeout;
WatchdogTime = watchdogTime;
DisableUnityWebCache = disableUnityWebCache;
FileHash = fileHash;
UnityCRC = unityCrc;
Headers = null;
}
/// <summary>
/// 添加请求头数据
/// </summary>
public void AddRequestHeader(string name, string value)
{
if (Headers == null)
Headers = new Dictionary<string, string>(10);
Headers.Add(name, value);
}
}
/// <summary>
/// 模拟下载请求参数
/// </summary>
/// <remarks>
/// 用于编辑器模式下模拟下载进度,不进行实际网络请求。
/// </remarks>
internal struct DownloadSimulateRequestArgs
{
/// <summary>
/// 请求地址(仅用于标识)
/// </summary>
public readonly string URL;
/// <summary>
/// 模拟的文件大小(字节)
/// </summary>
public readonly long FileSize;
/// <summary>
/// 模拟的下载速度(字节/秒)
/// </summary>
/// <remarks>
/// 用于计算模拟的下载进度。
/// </remarks>
public readonly long DownloadSpeed;
/// <summary>
/// 构造模拟下载请求参数
/// </summary>
/// <param name="url">请求地址(仅用于标识)</param>
/// <param name="fileSize">模拟的文件大小(字节)</param>
/// <param name="downloadSpeed">模拟的下载速度(字节/秒),默认 1MB/s</param>
public DownloadSimulateRequestArgs(string url, long fileSize, long downloadSpeed = 1024 * 1024)
{
URL = url;
FileSize = fileSize;
DownloadSpeed = downloadSpeed > 0 ? downloadSpeed : 1024 * 1024;
}
}
}