三国卡牌客户端基础资源仓库
yyl
2025-08-25 214fe94eaf7f09741a7857775dfffe8c3b83c75c
Assets/Launch/Common/DownLoadAndDiscompressTask.cs
@@ -3,6 +3,7 @@
using UnityEngine;
using System;
using LaunchCommon;
using Cysharp.Threading.Tasks;
public class DownLoadAndDiscompressTask : Singleton<DownLoadAndDiscompressTask>
@@ -38,7 +39,7 @@
        }
    }
    public void Prepare(List<LaunchCommon.AssetVersion> _downLoadTasks, Action _downLoadOkCallBack)
    public void Prepare(List<AssetVersion> _downLoadTasks, Action _downLoadOkCallBack)
    {
        tasks = _downLoadTasks;
        downLoadOkCallBack = _downLoadOkCallBack;
@@ -54,18 +55,18 @@
        }
        StartDownLoad();
    }
    public void StartDownLoad()
    {
        step = Step.DownLoad;
        DownloadMgr.Instance.StartCoroutine(Co_StartDownLoad());
        Co_StartDownLoad().Forget();
    }
    IEnumerator Co_StartDownLoad()
    async UniTask Co_StartDownLoad()
    {
        int downLoadTryCount = 0;
        List<bool> checkDownFile = new List<bool>();
        while (tasks.Count > 0)
        {
            DownloadMgr.MaxDownLoadTask = 10;
@@ -73,8 +74,8 @@
            for (int i = 0; i < tasks.Count; i++)
            {
                var assetVersion = tasks[i];
                var remoteURL = StringUtility.Contact(ResManager.Instance.versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), ResManager.fixPath, "/", assetVersion.relativePath);
                var localURL = StringUtility.Contact(ResManager.Instance.ExternalStorePath, assetVersion.relativePath);
                var remoteURL = StringUtility.Contact(LocalResManager.Instance.versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), LocalResManager.fixPath, "/", assetVersion.relativePath);
                var localURL = StringUtility.Contact(LocalResManager.Instance.ExternalStorePath, assetVersion.relativePath);
                DownloadMgr.Instance.AddTask(new DownloadTask(remoteURL, localURL));
            }
@@ -82,23 +83,45 @@
            while (!DownloadMgr.Instance.IsFinished)
            {
                yield return null;
                await UniTask.Yield();
            }
            checkDownFile = new List<bool>();
            //检查下载完成后的文件是否有效
            var filledTasks = new List<AssetVersion>();//无效的文件
            for (int i = 0; i < tasks.Count; i++)
            {
                var assetVersion = tasks[i];
                var correctFile = assetVersion.CheckLocalFileValid();
                var correctFile = assetVersion.CheckLocalFileValid(checkDownFile);
                if (correctFile)
                    assetVersion.localValid = true;
                else
                    filledTasks.Add(assetVersion);
            }
            if (filledTasks.Count > 0)
            {
                //文件大小或者MD5不对,1. cdn资源确实错误  2.cdn推送过程中 文件不匹配
                //需要重新下载LogicVersion文件
                if (checkDownFile.Count > 0)
                {
                    downLoadTryCount++;
                }
                Debug.LogErrorFormat("资源下载完后有{0}个文件无效({1}),重新开始下载", filledTasks.Count, filledTasks[0].fileName);
            }
            tasks = filledTasks;
            if (downLoadTryCount >= 1)
            {
                LocalResManager.step = LocalResManager.LoadDllStep.PrepareDownLoad;
                break;
            }
        }
        if (downLoadTryCount >= 1)
        {
            Debug.LogError("logic资源下载失败,警告提示,退出协程");
            LocalResManager.downLoadCount++;
            return;
        }
        Debug.Log("资源全部下载完成");
@@ -110,7 +133,6 @@
            downLoadOkCallBack();
            downLoadOkCallBack = null;
        }
    }
    public enum Step
@@ -120,5 +142,4 @@
        DownLoad,
        Completed,
    }
}
}