| | |
| | | using LaunchCommon; |
| | | |
| | | |
| | | public class DownLoadAndDiscompressTask : Singleton<DownLoadAndDiscompressTask> |
| | | { |
| | | public const int BYTE_PER_KILOBYTE = 1024; |
| | | public class DownLoadAndDiscompressTask : Singleton<DownLoadAndDiscompressTask> |
| | | |
| | | public float progress { get { return Mathf.Clamp01((float)DownloadMgr.Instance.DownloadedBytes / totalSize); } } |
| | | |
| | | List<AssetVersion> tasks = new List<AssetVersion>(); |
| | | public bool isDone { get { return step == Step.Completed; } } |
| | | public int totalSize { get; private set; } |
| | | public int totalCount { get; private set; } |
| | | |
| | | public event Action<Step> downLoadStepChangeEvent; |
| | | |
| | | Action downLoadOkCallBack; |
| | | |
| | | Step m_Step = Step.None; |
| | | public Step step |
| | | { |
| | | get { return m_Step; } |
| | | set |
| | | { |
| | | if (m_Step != value) |
| | | { |
| | | m_Step = value; |
| | | public const int BYTE_PER_KILOBYTE = 1024; |
| | | |
| | | if (downLoadStepChangeEvent != null) |
| | | public float progress { get { return Mathf.Clamp01((float)DownloadMgr.Instance.DownloadedBytes / totalSize); } } |
| | | |
| | | List<AssetVersion> tasks = new List<AssetVersion>(); |
| | | public bool isDone { get { return step == Step.Completed; } } |
| | | public int totalSize { get; private set; } |
| | | public int totalCount { get; private set; } |
| | | |
| | | public event Action<Step> downLoadStepChangeEvent; |
| | | |
| | | Action downLoadOkCallBack; |
| | | |
| | | Step m_Step = Step.None; |
| | | public Step step |
| | | { |
| | | get { return m_Step; } |
| | | set |
| | | { |
| | | if (m_Step != value) |
| | | { |
| | | downLoadStepChangeEvent(m_Step); |
| | | m_Step = value; |
| | | |
| | | if (downLoadStepChangeEvent != null) |
| | | { |
| | | downLoadStepChangeEvent(m_Step); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void Prepare(List<LaunchCommon.AssetVersion> _downLoadTasks, Action _downLoadOkCallBack) |
| | | { |
| | | tasks = _downLoadTasks; |
| | | downLoadOkCallBack = _downLoadOkCallBack; |
| | | |
| | | totalCount = tasks.Count; |
| | | step = Step.DownLoadPrepared; |
| | | totalSize = 0; |
| | | |
| | | for (int i = 0; i < tasks.Count; i++) |
| | | public void Prepare(List<AssetVersion> _downLoadTasks, Action _downLoadOkCallBack) |
| | | { |
| | | var task = tasks[i]; |
| | | totalSize += task.size; |
| | | } |
| | | tasks = _downLoadTasks; |
| | | downLoadOkCallBack = _downLoadOkCallBack; |
| | | |
| | | StartDownLoad(); |
| | | totalCount = tasks.Count; |
| | | step = Step.DownLoadPrepared; |
| | | totalSize = 0; |
| | | |
| | | } |
| | | |
| | | public void StartDownLoad() |
| | | { |
| | | step = Step.DownLoad; |
| | | DownloadMgr.Instance.StartCoroutine(Co_StartDownLoad()); |
| | | |
| | | } |
| | | |
| | | IEnumerator Co_StartDownLoad() |
| | | { |
| | | while (tasks.Count > 0) |
| | | { |
| | | DownloadMgr.MaxDownLoadTask = 10; |
| | | DownloadMgr.Instance.Prepare(); |
| | | for (int i = 0; i < tasks.Count; i++) |
| | | { |
| | | var assetVersion = tasks[i]; |
| | | var remoteURL = StringUtility.Contact(LocalResManager.Instance.versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), LocalResManager.fixPath, "/", assetVersion.relativePath); |
| | | var localURL = StringUtility.Contact(ResourcesPath.Instance.ExternalStorePath, assetVersion.relativePath); |
| | | DownloadMgr.Instance.AddTask(new DownloadTask(remoteURL, localURL)); |
| | | var task = tasks[i]; |
| | | totalSize += task.size; |
| | | } |
| | | |
| | | DownloadMgr.Instance.Begin(); |
| | | StartDownLoad(); |
| | | |
| | | while (!DownloadMgr.Instance.IsFinished) |
| | | { |
| | | yield return null; |
| | | } |
| | | |
| | | //检查下载完成后的文件是否有效 |
| | | var filledTasks = new List<AssetVersion>();//无效的文件 |
| | | for (int i = 0; i < tasks.Count; i++) |
| | | { |
| | | var assetVersion = tasks[i]; |
| | | var correctFile = assetVersion.CheckLocalFileValid(); |
| | | if (correctFile) |
| | | assetVersion.localValid = true; |
| | | else |
| | | filledTasks.Add(assetVersion); |
| | | } |
| | | if (filledTasks.Count > 0) |
| | | Debug.LogErrorFormat("资源下载完后有{0}个文件无效({1}),重新开始下载", filledTasks.Count, filledTasks[0].fileName); |
| | | tasks = filledTasks; |
| | | } |
| | | |
| | | Debug.Log("资源全部下载完成"); |
| | | |
| | | step = Step.Completed; |
| | | |
| | | if (downLoadOkCallBack != null) |
| | | public void StartDownLoad() |
| | | { |
| | | downLoadOkCallBack(); |
| | | downLoadOkCallBack = null; |
| | | step = Step.DownLoad; |
| | | DownloadMgr.Instance.StartCoroutine(Co_StartDownLoad()); |
| | | |
| | | } |
| | | |
| | | } |
| | | IEnumerator Co_StartDownLoad() |
| | | { |
| | | int downLoadTryCount = 0; |
| | | List<bool> checkDownFile = new List<bool>(); |
| | | while (tasks.Count > 0) |
| | | { |
| | | DownloadMgr.MaxDownLoadTask = 10; |
| | | DownloadMgr.Instance.Prepare(); |
| | | for (int i = 0; i < tasks.Count; i++) |
| | | { |
| | | var assetVersion = tasks[i]; |
| | | 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)); |
| | | } |
| | | |
| | | public enum Step |
| | | { |
| | | None, |
| | | DownLoadPrepared, |
| | | DownLoad, |
| | | Completed, |
| | | } |
| | | DownloadMgr.Instance.Begin(); |
| | | |
| | | } |
| | | while (!DownloadMgr.Instance.IsFinished) |
| | | { |
| | | yield return null; |
| | | } |
| | | |
| | | 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(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++; |
| | | yield break; |
| | | } |
| | | |
| | | Debug.Log("资源全部下载完成"); |
| | | |
| | | step = Step.Completed; |
| | | |
| | | if (downLoadOkCallBack != null) |
| | | { |
| | | downLoadOkCallBack(); |
| | | downLoadOkCallBack = null; |
| | | } |
| | | |
| | | } |
| | | |
| | | public enum Step |
| | | { |
| | | None, |
| | | DownLoadPrepared, |
| | | DownLoad, |
| | | Completed, |
| | | } |
| | | |
| | | } |