/// <summary> /// 解压热更新资源失败回调 /// </summary> /// <param name="status">失败原因</param> /// <param name="unzipAgain">重新解压</param> private void OnUnzipFail(UnzipStatus status, Action unzipAgain) { var handler = handlerMap[HotUpdateEventType.UnzipFail]; this.nextAction = unzipAgain; if (handler != null) { handler.Call((int)status); } }
private void UnzipThreadRun() { Array.Sort(_allTransferedFiles); for (int i = 0; i < _allTransferedFiles.Length; i++) { unzipTaskIndex = i; unzipStatus = UnzipStatus.Processing; unzipStatus = UnzipOrMoveTempToAsset(_allTransferedFiles[i].path, i, _allTransferedFiles.Length); if (unzipStatus != UnzipStatus.Success) { return; } } VersionMgr.Instance.UpdateLocalVersionData(); VersionMgr.Instance.SaveLocalCacheVersionData(); ClearTempDir(); }
private void OnUnzipFinished(UnzipStatus status) { if (VersionMgr.Instance.remoteVerCode.Version != VersionMgr.Instance.localCacheVerCode.Version /*&& UnzipFailedHandler != null*/) { Debug.Log("VersionMgr.Instance.remoteVerCode.Version:" + VersionMgr.Instance.remoteVerCode.Version); Debug.Log("VersionMgr.Instance.localCacheVerCode.Version:" + VersionMgr.Instance.localCacheVerCode.Version); //UnzipFailedHandler(() => { _downloadMgr.transferMgr.DownloadFinished(OnHandlerFinished, UnzipProgressHandler); }, status); EventCenter.Broadcast <UnzipStatus, Action>((int)HotUpdateEventType.UnzipFail, status, delegate { _unzipThread.StartUnzip(OnUnzipFinished); }); } else { EventCenter.Broadcast((int)HotUpdateEventType.UnzipSuccess); //OnUpdateComplete(); endUpdateTime = Utility.GetCurrentUTC() / 1000; // 清理即可,不再调用Lua因为马上要执行重启Lua Dispose(); CLogger.Log("GameUpdateMgr::OnUnzipFinished()!"); // 释放热更界面 ClearUI(); // 加载新的资源缓存 LocalCacheFilesMgr.Instance.LoadCacheFiles(); // 清理事件 EventCenter.Cleanup(); GameUpdateHelper.Instance.ClearListeners(); // 释放资源 AssetLoad.ResourceManager.instance.ReleaseAll(); // 调试,面板也清理一下 Debuger.DisposeOnRestart(); // 重启xlua LuaManager.instance.ReStart(); } }
private IEnumerator StartUnzipThread(Action <UnzipStatus> callback /*, Action<float> unzipProgress*/) { EventCenter.Broadcast((int)HotUpdateEventType.StartUnzipNotify); _totalUnzipProgress = 0f; unzipStatus = UnzipStatus.Init; unzipThread = new Thread(UnzipThreadRun); unzipThread.Start(); Thread thread = unzipThread; while (thread.IsAlive) { EventCenter.Broadcast((int)HotUpdateEventType.UnzipProgress, _totalUnzipProgress); yield return(null); } StopUnzipThread(); EventCenter.Broadcast((int)HotUpdateEventType.UnzipProgress, 1f); yield return(null); callback.Invoke(unzipStatus); unzipStatus = UnzipStatus.Init; }
public UnzipThread(DownloadFileTransferInfo[] allTransferedFiles) { _allTransferedFiles = allTransferedFiles; unzipStatus = UnzipStatus.Init; _totalUnzipProgress = 0f; }
private UnzipStatus UnzipOrMoveTempToAsset(string tempFileName, int unzipTaskIndex, int maxUnzipTasks) { UnzipStatus status = UnzipStatus.Success; string tempFullPath = FileUtils.LocalTempResRootPath + tempFileName; if (tempFullPath.EndsWith(".zip")) { List <string> allUnzipFileNames; CLogger.Log("GameUpdateMgr::UnzipOrMoveTempToAsset() - Start unzip file, fullName=" + tempFileName); //EventHandler<Ionic.Zip.ExtractProgressEventArgs> extractProgress = (object sender, Ionic.Zip.ExtractProgressEventArgs e) => //{ // _totalUnzipProgress = (unzipTaskIndex + (float)e.BytesTransferred / e.TotalBytesToTransfer) / maxUnzipTasks; //}; status = ZipUtil.UnZip(tempFullPath, FileUtils.LocalResRootPath, out allUnzipFileNames); if (status == UnzipStatus.Success) { CLogger.Log("GameUpdateMgr::UnzipOrMoveTempToAsset() - Unzip file success, fullName=" + tempFileName); for (int i = 0; i < allUnzipFileNames.Count; i++) { VersionMgr.Instance.UpdateLocalCacheData(allUnzipFileNames[i]); } //EventCenter.Broadcast((int)HotUpdateEventType.UnzipFileNotify, allUnzipFileNames); MainThreadRunner.Instance.RunOnMainThread(() => { EventCenter.Broadcast((int)HotUpdateEventType.UnzipFileNotify, allUnzipFileNames.ToArray()); }); } else { CLogger.Log("GameUpdateMgr::UnzipOrMoveTempToAsset() - Unzip file faild, fullName=" + tempFileName); } } else { try { //string dstAssetPath = FileUtils.Instance.FullPathForFile(tempFileName, ResourceType.ASSET_BUNDLE); string dstAssetPath = PathManager.URL(tempFileName, AssetLoad.AssetType.eNone, false); if (File.Exists(dstAssetPath)) { File.Delete(dstAssetPath); } FileUtils.Instance.CheckDirExistsForFile(dstAssetPath); File.Copy(tempFullPath, dstAssetPath); VersionMgr.Instance.UpdateLocalCacheData(tempFileName); MainThreadRunner.Instance.RunOnMainThread(() => { List <string> allUnzipFileNames = new List <string>(); allUnzipFileNames.Add(tempFileName); EventCenter.Broadcast((int)HotUpdateEventType.UnzipFileNotify, allUnzipFileNames.ToArray()); }); } catch (Exception e) { CLogger.LogError("GameUpdateMgr::UnzipOrMoveTempToAsset() - Exception: " + e.Message); if (e.Message.Contains("Disk full")) { status = UnzipStatus.DiskFull; } status = UnzipStatus.Exception; } } return(status); }
/// <summary> /// 解压功能(解压压缩文件到指定目录) /// </summary> /// <param name="fileToUnZip">待解压的文件</param> /// <param name="zipedFolder">指定解压目标目录</param> /// <returns>解压结果</returns> public static UnzipStatus UnZip(string fileToUnZip, string zipedFolder, out List <string> extractFileNames) { UnzipStatus result = UnZip(fileToUnZip, zipedFolder, null, out extractFileNames); return(result); }