using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
using StartAotSDK;
|
|
|
namespace StartAot
|
{
|
public class DownLoadAndDiscompressTask : Singleton<DownLoadAndDiscompressTask>
|
|
{
|
public const int BYTE_PER_KILOBYTE = 1024;
|
|
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;
|
|
if (downLoadStepChangeEvent != null)
|
{
|
downLoadStepChangeEvent(m_Step);
|
}
|
}
|
}
|
}
|
|
public void Prepare(List<AssetVersion> _downLoadTasks, Action _downLoadOkCallBack)
|
{
|
tasks = _downLoadTasks;
|
downLoadOkCallBack = _downLoadOkCallBack;
|
|
totalCount = tasks.Count;
|
step = Step.DownLoadPrepared;
|
totalSize = 0;
|
|
for (int i = 0; i < tasks.Count; i++)
|
{
|
var task = tasks[i];
|
totalSize += task.size;
|
}
|
|
StartDownLoad();
|
|
}
|
|
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(ResourcesModel.Instance.versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), ResourcesModel.fixPath, "/", assetVersion.relativePath);
|
var localURL = StringUtility.Contact(ResourcesModel.Instance.ExternalStorePath, assetVersion.relativePath);
|
DownloadMgr.Instance.AddTask(new DownloadTask(remoteURL, localURL));
|
}
|
|
DownloadMgr.Instance.Begin();
|
|
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)
|
DebugEx.LogErrorFormat("资源下载完后有{0}个文件无效({1}),重新开始下载", filledTasks.Count, filledTasks[0].fileName);
|
tasks = filledTasks;
|
}
|
|
DebugEx.Log("资源全部下载完成");
|
|
step = Step.Completed;
|
|
if (downLoadOkCallBack != null)
|
{
|
downLoadOkCallBack();
|
downLoadOkCallBack = null;
|
}
|
|
}
|
|
public enum Step
|
{
|
None,
|
DownLoadPrepared,
|
DownLoad,
|
Completed,
|
}
|
|
}
|
|
}
|