hch
2025-09-16 9b09f189e2830126a6d2f45dcba6b64c316960d0
Main/System/AssetVersion/DownloadHotMgr.cs
File was renamed from Main/System/AssetVersion/DownloadMgr.cs
@@ -10,7 +10,7 @@
using Cysharp.Threading.Tasks;
public class DownloadMgr : SingletonMonobehaviour<DownloadMgr>
public class DownloadHotMgr : SingletonMonobehaviour<DownloadHotMgr>
{
    #region 配置
    public static int MaxRetryTimes = 5;//最大重试的次数
@@ -19,14 +19,14 @@
    #endregion
    #region 任务列表
    private Dictionary<string, DownloadTask> allTask = new Dictionary<string, DownloadTask>();    //所有任务组
    private Queue<DownloadTask> waitTask = new Queue<DownloadTask>();    //当前等待下载的任务
    private Dictionary<string, DownloadTask> downloadTask = new Dictionary<string, DownloadTask>();    //当前正在下载的任务
    private Dictionary<string, DownloadHotTask> allTask = new Dictionary<string, DownloadHotTask>();    //所有任务组
    private Queue<DownloadHotTask> waitTask = new Queue<DownloadHotTask>();    //当前等待下载的任务
    private Dictionary<string, DownloadHotTask> downloadTask = new Dictionary<string, DownloadHotTask>();    //当前正在下载的任务
    #endregion 任务列表
    private bool isBegin;
    private int startTickcount = 0;
    private Func<bool, DownloadTask, bool> onTaskCompleted;//文件下载完成回调,<是否全部完成,任务对象,return true:立即重试,false:到队尾重试>
    private Func<bool, DownloadHotTask, bool> onTaskCompleted;//文件下载完成回调,<是否全部完成,任务对象,return true:立即重试,false:到队尾重试>
    //总速度
    private float speed;
@@ -69,7 +69,7 @@
    }
    //添加任务
    public DownloadMgr AddTask(DownloadTask task)
    public DownloadHotMgr AddTask(DownloadHotTask task)
    {
        if (allTask.ContainsKey(task.Key))
        {
@@ -82,7 +82,7 @@
    }
    //准备下载,重置状态
    public DownloadMgr Prepare()
    public DownloadHotMgr Prepare()
    {
        Stop();
        this.onTaskCompleted = null;
@@ -99,7 +99,7 @@
    /// </summary>
    /// <param name="onTaskCompleted">任务结束回调</param>
    /// <returns></returns>
    public DownloadMgr Begin(Func<bool, DownloadTask, bool> onTaskCompleted = null)
    public DownloadHotMgr Begin(Func<bool, DownloadHotTask, bool> onTaskCompleted = null)
    {
        this.onTaskCompleted = onTaskCompleted;
        startTickcount = TimeUtility.AllSeconds;
@@ -145,7 +145,7 @@
    }
    // 任务下载完成
    private void OnTaskCompleted(DownloadTask task)
    private void OnTaskCompleted(DownloadHotTask task)
    {
        downloadTask.Remove(task.Key);
        if (task.IsDone)//下载成功
@@ -180,7 +180,7 @@
public class DownloadTask
public class DownloadHotTask
{
    //下载任务状态
    public enum TaskState
@@ -195,7 +195,7 @@
    public readonly string tempFile;//临时文件地址
    private readonly bool clearCache;//是否清除旧的下载缓存,(断点续传)
    public readonly object obj; //自定义对象
    private Action<DownloadTask> onCompleted;//下载完成回调
    private Action<DownloadHotTask> onCompleted;//下载完成回调
    private TaskState state;//下载状态
    public bool isStop;//下载被停止
@@ -230,7 +230,7 @@
    /// <param name="localUrl">本地保存地址</param>
    /// <param name="obj">自定义对象</param>
    /// <param name="clearCache">是否清除上次下载的缓存</param>
    public DownloadTask(string remoteUrl, string localUrl, object obj = null, bool clearCache = false)
    public DownloadHotTask(string remoteUrl, string localUrl, object obj = null, bool clearCache = false)
    {
        this.remoteUrl = remoteUrl;
        this.localFile = localUrl;
@@ -266,11 +266,11 @@
        if (IsWorking)
            return;
        Co_GetHeader();
        Co_GetHeader().Forget();
        // SnxxzGame.Instance.StartCoroutine(Co_GetHeader());
    }
    public bool BeginDownload(Action<DownloadTask> onCompleted)
    public bool BeginDownload(Action<DownloadHotTask> onCompleted)
    {
        if ((IsWorking && requestHeaderOk) || IsDone)//已经在下载任务中或已经下载完成了
            return false;
@@ -278,7 +278,7 @@
            failedTimes = 0;
        this.onCompleted = onCompleted;
        this.isStop = false;
        Co_DownloadFile();
        Co_DownloadFile().Forget();
        // SnxxzGame.Instance.StartCoroutine(Co_DownloadFile());
        return true;
    }
@@ -300,7 +300,7 @@
        Debug.LogFormat("开始获取头信息:{0}", remoteUrl);
        using (var www = UnityWebRequest.Head(remoteUrl))
        {
            www.timeout = DownloadMgr.TimeOut;
            www.timeout = DownloadHotMgr.TimeOut;
            await www.SendWebRequest();
            if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError)
            {
@@ -443,6 +443,7 @@
    private async UniTask Move(string sourceFile, string destFile)
    {
        var copyState = 0;//复制文件状态,0等待,1成功,2失败
        try
        {
@@ -464,6 +465,8 @@
        }
        else
            SetFailed("临时文件改名出错");
        await UniTask.CompletedTask;
    }
}