Files
2025-01-25 04:38:09 +08:00

148 lines
4.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using Thousandto.Update.Xml;
using Thousandto.Update.Log;
using Thousandto.Update.Download;
using Thousandto.Update.Data;
using DownloadSpeeder = UnityEngine.Gonbest.MagicCube.DownloadSpeeder;
namespace Thousandto.Update.Flow
{
/// <summary>
/// 9. 资源修复下载Flow8检查出的需要修复的资源列表
/// </summary>
public class Flow9RepairResource : BaseFlow
{
//包含分段资源数据
private DataModel _currentData;
//资源修复下载器
private RepairDownload _repairDownload;
//本地xml
private LocalVersionXml _localXml;
//解析的map文件数据
List<MapFileData> _mapFileDataList;
//需要下载的总大小
private int _totalSize;
public override void Inititalize()
{
base.Inititalize();
_repairDownload = new RepairDownload();
_totalSize = 0;
UseDownload = true;
}
public override void OnEnter(BaseFlow oldFlow)
{
base.OnEnter(oldFlow);
_localXml = LocalXml;
_currentData = CurrentRemoteData;
_mapFileDataList = MapFileDataListForDownload;
DownloadSpeeder.Reset();
_totalSize = 0;
}
public override int Work()
{
if (!CheckLastFlowResult()) return LastFlowResult;
UpdateLog.DEBUG_LOG("资源修复++++");
int ret = CodeDefine.RET_INIT;
ret = repairResource();
UpdateLog.DEBUG_LOG("资源修复----");
return ret;
}
public override void OnLeave(int ret)
{
base.OnLeave(ret);
//Thousandto.Update.Download.Download.MutiDownloadedSize = 0;
}
//需要下载的总大小
public int GetTotalSize()
{
return _totalSize;
}
public override void GetCurDownInfo(out string url, out int total, out int downloaded)
{
base.GetCurDownInfo(out url, out total, out downloaded);
total = _totalSize;
downloaded = DownloadSpeeder.CurTotalSize;
}
public override void Uninitialize()
{
if (_mapFileDataList != null)
{
_mapFileDataList.Clear();
}
}
public override void Abort()
{
base.Abort();
if (_repairDownload != null)
{
_repairDownload.AbortAll(null);
}
}
private int repairResource()
{
int ret = CodeDefine.RET_INIT;
if (_mapFileDataList == null || _mapFileDataList.Count == 0)
{
ret = CodeDefine.RET_SUCCESS;
UpdateLog.DEBUG_LOG("没有资源需要修复");
updateLocalPathVersion();
return ret;
}
UpdateLog.DEBUG_LOG("开始资源修复");
for (int i = 0; i < _mapFileDataList.Count; ++i)
{
_totalSize += _mapFileDataList[i].FileSize;
}
if (!Pause(_totalSize))
{
ret = CodeDefine.RET_SKIP_BY_CANCEL;
}
else
ret = _repairDownload.DownloadFileByMultiThread(_mapFileDataList);
if (ret >= CodeDefine.RET_SUCCESS)
{
updateLocalPathVersion();
}
var success = ret >= CodeDefine.RET_SUCCESS;
Recorder.StepRecorder.AddStep(Recorder.StepType.RepaireFiles, success ? 0 : 1, success.ToString());
return ret;
}
//更新本地补丁版本号
private void updateLocalPathVersion()
{
string localPathVersion = _localXml.PatchResVersion;
string latestPathVersion = localPathVersion;
if (_currentData.LastVersionPatch != null)
{
latestPathVersion = _currentData.LastVersionPatch.ToVersion;
}
if (CompareVersionFormat(latestPathVersion, localPathVersion) > 0)
{
LocalXml.save("", latestPathVersion);
}
}
}
}