コード例 #1
0
ファイル: GameUpdateHelper.cs プロジェクト: qweewqpkn/MyStudy
        /// <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);
            }
        }
コード例 #2
0
ファイル: UnzipThread.cs プロジェクト: qweewqpkn/MyStudy
 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();
 }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
ファイル: UnzipThread.cs プロジェクト: qweewqpkn/MyStudy
        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;
        }
コード例 #5
0
ファイル: UnzipThread.cs プロジェクト: qweewqpkn/MyStudy
 public UnzipThread(DownloadFileTransferInfo[] allTransferedFiles)
 {
     _allTransferedFiles = allTransferedFiles;
     unzipStatus         = UnzipStatus.Init;
     _totalUnzipProgress = 0f;
 }
コード例 #6
0
ファイル: UnzipThread.cs プロジェクト: qweewqpkn/MyStudy
        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);
        }
コード例 #7
0
ファイル: ZipUtil.cs プロジェクト: qweewqpkn/MyStudy
        /// <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);
        }