148 lines
4.4 KiB
C#
148 lines
4.4 KiB
C#
using System.IO;
|
||
using Thousandto.Update.Enum;
|
||
using Thousandto.Update.Log;
|
||
using Thousandto.Update.Trans;
|
||
|
||
namespace Thousandto.Update.Flow
|
||
{
|
||
/// <summary>
|
||
/// 1. 转移obb资源, android only
|
||
/// </summary>
|
||
public class Flow1TransResourceExOBB : BaseFlow
|
||
{
|
||
//平台类型
|
||
private PlatformType _platformType;
|
||
//资源转移功能实例
|
||
TransResource _transInstance;
|
||
|
||
private string _obbFileFullPath = "";
|
||
|
||
public void SetExternalData(string sourcePath, PlatformType type, Thousandto.Update.Delegate.TransResourceFinishCallback transFinishCallback = null)
|
||
{
|
||
_platformType = type;
|
||
|
||
switch (_platformType)
|
||
{
|
||
case PlatformType.Android:
|
||
_transInstance = new TransAndroidResource();
|
||
break;
|
||
case PlatformType.IOS:
|
||
_transInstance = new TransIOSResource();
|
||
break;
|
||
case PlatformType.Windows:
|
||
_transInstance = new TransPCResource();
|
||
break;
|
||
default:
|
||
_transInstance = new TransPCResource();
|
||
break;
|
||
}
|
||
|
||
_obbFileFullPath = GetObbFullPath(sourcePath);
|
||
UpdateLog.DEBUG_LOG("Obb full path:" + _obbFileFullPath);
|
||
|
||
//全转移
|
||
_transInstance.IsUnZipObb = true;
|
||
_transInstance.SetUnzipPath(_obbFileFullPath, _storeDir, transFinishCallback);
|
||
}
|
||
|
||
public void ReInitTransData()
|
||
{
|
||
if (_transInstance != null)
|
||
_transInstance.ReInit();
|
||
}
|
||
|
||
//强制转移资源,因为要更新资源,不管是基础资源还是补丁资源
|
||
public void ForceTransWhenNeedUpdate()
|
||
{
|
||
}
|
||
|
||
//强制做资源释放, 在ios通过游戏内更新分段资源时调用
|
||
public void SetForceUnzip()
|
||
{
|
||
}
|
||
|
||
public override void OnEnter(BaseFlow oldFlow)
|
||
{
|
||
base.OnEnter(oldFlow);
|
||
|
||
//转移过资源,xml就从storePath取。否则从包内取
|
||
ChangeLocalXmlPath(HasTransedResource());
|
||
}
|
||
|
||
public override int Work()
|
||
{
|
||
if (!CheckLastFlowResult()) return LastFlowResult;
|
||
|
||
int ret = CodeDefine.RET_INIT;
|
||
if (!checkNeedTrans())
|
||
{
|
||
ret = CodeDefine.RET_SUCCESS;
|
||
}
|
||
else
|
||
{
|
||
if (!string.IsNullOrEmpty(_obbFileFullPath) && File.Exists(_obbFileFullPath))
|
||
{
|
||
//转移资源完成后调用
|
||
_transInstance.SetInternalCallback(() =>
|
||
{
|
||
File.Delete(_obbFileFullPath);
|
||
});
|
||
|
||
_transInstance.StartUnzipByThread();
|
||
|
||
bool success = _transInstance.GetTransReslult();
|
||
|
||
ret = success ? CodeDefine.RET_SUCCESS : CodeDefine.RET_FAIL_TRANS_FAIL;
|
||
_transInstance.CallFinish(success);
|
||
}
|
||
else
|
||
ret = CodeDefine.RET_SUCCESS;
|
||
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
public override void Uninitialize()
|
||
{
|
||
LocalXml = null;
|
||
}
|
||
|
||
public override void GetCurDownInfo(out string url, out int total, out int downloaded)
|
||
{
|
||
base.GetCurDownInfo(out url, out total, out downloaded);
|
||
url = "";
|
||
total = _transInstance.GetTotalValue();
|
||
downloaded = _transInstance.GetCurrentProgress();
|
||
}
|
||
|
||
public void TransResourceFinish(bool result)
|
||
{
|
||
|
||
}
|
||
|
||
//判断是否需要转移资源
|
||
private bool checkNeedTrans()
|
||
{
|
||
bool ret = false;
|
||
|
||
if (_platformType != PlatformType.Android)
|
||
return ret;
|
||
|
||
return !string.IsNullOrEmpty(_obbFileFullPath) && File.Exists(_obbFileFullPath);
|
||
}
|
||
|
||
private string GetObbFullPath(string storePath)
|
||
{
|
||
string obbPath = storePath.Replace("/data/", "/obb/").Replace("files/StreamingAssets", "");
|
||
UpdateLog.DEBUG_LOG("obb root path:" + obbPath);
|
||
if(Directory.Exists(obbPath))
|
||
{
|
||
var files = Directory.GetFiles(obbPath, "*.obb");
|
||
if (files.Length > 0)
|
||
return files[0];
|
||
}
|
||
return null;
|
||
}
|
||
}
|
||
}
|