public override int Work() { if (!CheckLastFlowResult()) { return(LastFlowResult); } int ret = CodeDefine.RET_INIT; if (!checkNeedTrans()) { ret = CodeDefine.RET_SUCCESS; } else { //如果有老的xml,需要先保存数据 LocalVersionXml oldXml = getOldXmlData(_storedLocalXmlPath); _transInstance.StartUnzipByThread(); bool success = _transInstance.GetTransReslult(); if (success) { //将老数据:分段版本、补丁版本、app版本填充的新的xml中 updateLocalXmlData(oldXml, _storedLocalXmlPath, true); ChangeLocalXmlPath(true); } ret = success ? CodeDefine.RET_SUCCESS : CodeDefine.RET_FAIL_TRANS_FAIL; _transInstance.CallFinish(success); _forceTrans = false; } return(ret); }
public override void OnEnter(BaseFlow oldFlow) { base.OnEnter(oldFlow); _localXml = LocalXml; _currentData = CurrentRemoteData; _mapFileDataList = MapFileDataListForDownload; UpdateSystem.Download.Download.MutiDownloadedSize = 0; _totalSize = 0; }
//是否已经转移过资源了 public static bool HasTransedResource() { if (File.Exists(_storedLocalXmlPath)) { var localXml = new LocalVersionXml(); localXml.parseLocalVersionXml(_storedLocalXmlPath); return(localXml.HasCopy.ToLower() == _hasCopyTag); } return(false); }
//解析localversion public int parseLocalVersion(string localXmlPath) { int ret = CodeDefine.RET_SUCCESS; LocalXml = new LocalVersionXml(); ret = LocalXml.parseLocalVersionXml(localXmlPath); if (ret >= CodeDefine.RET_SUCCESS) { LocalBaseResVersion = LocalXml.BaseResVersion; } return(ret); }
private LocalVersionXml getOldXmlData(string oldXmlPath) { LocalVersionXml xml = null; if (File.Exists(oldXmlPath)) { xml = new LocalVersionXml(); xml.parseLocalVersionXml(oldXmlPath); } return(xml); }
//判断是否需要转移资源 private bool checkNeedTrans() { UpdateLog.DEBUG_LOG("检查是否需要转移资源"); bool ret = false; LocalVersionXml localXml = getOldXmlData(_storedLocalXmlPath); string storedAppVersion = localXml == null ? "" : localXml.LocalAppVersion; string hasCopy = localXml == null ? "" : localXml.HasCopy; //存储的app版本号不存在(没释放过资源, 本地LocalVersion.xml不存在) if (string.IsNullOrEmpty(storedAppVersion)) { if (_inAppBaseVersion == "0") { //同时包内分段号为0,则说明是下载器,需要强制释放资源 ret = true; UpdateLog.DEBUG_LOG("inAppBaseVerson==0,需要强制转移资源"); } else if (_platformType == PlatformType.IOS && !_forceTrans) { string inAppXmlAppVer = getIOSAppVerInXml(_inAppLocalXmlPath); if (!string.IsNullOrEmpty(inAppXmlAppVer) && _inAppClientVersion.CompareTo(inAppXmlAppVer) > 0) { ret = true; UpdateLog.DEBUG_LOG("IOS平台,包内版本比包内xml中app版本更高,需要转移资源"); } else { //没释放过资源,并且是ios平台,分段号又不为0,说明包内有资源可以运行,不做资源释放 ret = false; UpdateLog.DEBUG_LOG("游戏启动,IOS平台,跳过转移资源"); } } else { ret = true; UpdateLog.DEBUG_LOG("需要转移资源"); } } else if (_inAppClientVersion.CompareTo(storedAppVersion) > 0 || hasCopy.ToLower() != _hasCopyTag) { UpdateLog.DEBUG_LOG(string.Format("_inAppClientVersion={0} storedAppVersion={1} hasCopy={2}", _inAppClientVersion, storedAppVersion, hasCopy)); //包内版本比本地版本要大,说明是新客户端,需要做新资源释放覆盖 ret = true; UpdateLog.DEBUG_LOG("客户端更新或者上次转移失败,需要重新转移资源"); } else { UpdateLog.DEBUG_LOG("不需要转移资源"); } return(ret); }
private string getIOSAppVerInXml(string localXmlPath) { string appVer = ""; if (!string.IsNullOrEmpty(localXmlPath) && File.Exists(localXmlPath)) { var xml = new LocalVersionXml(); xml.parseLocalVersionXml(localXmlPath); appVer = xml.LocalAppVersion; } return(appVer); }
public override int Work() { if (!CheckLastFlowResult()) { return(LastFlowResult); } int ret = CodeDefine.RET_INIT; _localXml = LocalXml; if (_localXml == null) { return(ret); } //跳过更新 if (_localXml.EnableDownload.Equals("false")) { ret = CodeDefine.RET_SKIP_BY_DISABLEDOWNLOAD; return(ret); } //有数据,则不重新下载xml了 if (RemoteXml != null && _recentResult >= CodeDefine.RET_SUCCESS) { ret = _recentResult; return(ret); } _remoteXmlName = _localXml.ResourceVersionUrl.Substring(_localXml.ResourceVersionUrl.LastIndexOf("/") + 1); //1. 下载 ret = downloadRemoteXml(_localXml.ResourceVersionUrl, _storeDir); if (ret >= CodeDefine.RET_SUCCESS) { string downloadedXmlPath = System.IO.Path.Combine(_storeDir, _remoteXmlName); //2. 解析 ret = parseResourceXml(downloadedXmlPath); } if (ret >= CodeDefine.RET_SUCCESS) { //3. 判断使用正式流程还是测试流程 CurrentRemoteData = useTestFlow() ? RemoteXml.TestFollow : RemoteXml.NormalFollow; sortBaseVersion(); } return(ret); }
private void updateLocalXmlData(LocalVersionXml oldXml, string newXmlPath, bool transed) { if (File.Exists(newXmlPath)) { LocalVersionXml newXml = new LocalVersionXml(); newXml.parseLocalVersionXml(newXmlPath); if (oldXml != null) { newXml.save(oldXml.BaseResVersion, oldXml.PatchResVersion, "", _inAppClientVersion); } if (transed) { newXml.save("", "", _hasCopyTag); } } }
/// <summary> /// 做数据拷贝,将上一个流程的数据转到当前流程 /// </summary> /// <param name="oldFlow"></param> public virtual void OnEnter(BaseFlow oldFlow) { if (!_initialized) { //Inititalize(); } if (_perFlowActionCall != null) { _perFlowActionCall(null); } if (oldFlow == null) { return; } //数据拷贝 if (oldFlow.LocalXml != null) { LocalXml = oldFlow.LocalXml; } if (oldFlow.RemoteXml != null) { RemoteXml = oldFlow.RemoteXml; } if (oldFlow.CurrentRemoteData != null) { CurrentRemoteData = oldFlow.CurrentRemoteData; } if (!string.IsNullOrEmpty(oldFlow.LocalBaseResVersion)) { LocalBaseResVersion = oldFlow.LocalBaseResVersion; } if (oldFlow.MapFileDataListForDownload != null) { MapFileDataListForDownload = oldFlow.MapFileDataListForDownload; } if (oldFlow.ForceCheckMd5List != null) { ForceCheckMd5List = oldFlow.ForceCheckMd5List; } LastFlowResult = oldFlow.CurrentFlowResult; }
public override void OnEnter(BaseFlow oldFlow) { base.OnEnter(oldFlow); _localXml = LocalXml; _currentData = CurrentRemoteData; }
public override void Uninitialize() { _currentData = null; _localXml = null; }