public int CountWorkStep() { _PackageVer = 0; _ObbVer = 0; _PackageResKeys = null; _ObbResKeys = null; _RunningVer = null; _OldRunningKeys = null; _PendingFiles = null; _UpdateFiles = null; // Parse the ver num in the app package. if (Application.streamingAssetsPath.Contains("://")) { if (Application.platform == RuntimePlatform.Android) { { // Apk ver. var arch = ResManager.AndroidApkZipArchive; if (arch != null) { try { var entry = arch.GetEntry("assets/res/version.txt"); if (entry != null) { using (var stream = entry.Open()) { using (var sr = new System.IO.StreamReader(stream)) { var strver = sr.ReadLine(); int.TryParse(strver, out _PackageVer); } } } } catch (Exception e) { PlatDependant.LogError(e); } } } { // Obb ver. var arch = ResManager.ObbZipArchive; if (arch != null) { try { var entry = arch.GetEntry("res/version.txt"); if (entry != null) { using (var stream = entry.Open()) { using (var sr = new System.IO.StreamReader(stream)) { var strver = sr.ReadLine(); int.TryParse(strver, out _ObbVer); } } } } catch (Exception e) { PlatDependant.LogError(e); } } } } else { var vertxt = Resources.Load <TextAsset>("version"); if (vertxt != null) { try { var strver = vertxt.text; int.TryParse(strver, out _PackageVer); } catch (Exception e) { PlatDependant.LogError(e); } } } } else { var path = Application.streamingAssetsPath + "/res/version.txt"; if (PlatDependant.IsFileExist(path)) { using (var sr = PlatDependant.OpenReadText(path)) { var strver = sr.ReadLine(); int.TryParse(strver, out _PackageVer); } } } // Parse the ver num running now. if (_PackageVer > 0 || _ObbVer > 0) { var uverpath = ThreadSafeValues.UpdatePath + "/res/ver.txt"; if (PlatDependant.IsFileExist(uverpath)) { _RunningVer = ParseRunningResVersion(); if (_RunningVer.Count == 0) { _RunningVer = null; } } else { // _RunningVer = null; // this means: should delete all. } } // Are all running versions newer than the app ver? bool IsAllRunningVersionNew = true; if (_PackageVer > 0 || _ObbVer > 0) { if (_RunningVer == null) { IsAllRunningVersionNew = false; } else { var MaxAppVer = _PackageVer > _ObbVer ? _PackageVer : _ObbVer; foreach (var kvpver in _RunningVer) { if (kvpver.Value < MaxAppVer) { IsAllRunningVersionNew = false; } } } } int workcnt = 0; if (!IsAllRunningVersionNew) { // Parse res keys in the app package. if (Application.streamingAssetsPath.Contains("://")) { if (Application.platform == RuntimePlatform.Android) { if (_PackageVer > 0) { ResManager.SkipPending = true; ResManager.SkipUpdate = true; ResManager.SkipObb = true; ResManager.SkipPackage = false; _PackageResKeys = ParseRunningResKeys(); if (_PackageResKeys.Count == 0) { _PackageResKeys = null; } } if (_ObbVer > 0) { ResManager.SkipPending = true; ResManager.SkipUpdate = true; ResManager.SkipPackage = true; ResManager.SkipObb = false; _ObbResKeys = ParseRunningResKeys(); if (_ObbResKeys.Count == 0) { _ObbResKeys = null; } } } else { _PackageResKeys = new List <string>(_RunningVer.Keys); } } else { ResManager.SkipPending = true; ResManager.SkipUpdate = true; ResManager.SkipObb = true; ResManager.SkipPackage = false; _PackageResKeys = ParseRunningResKeys(); if (_PackageResKeys.Count == 0) { _PackageResKeys = null; } } if (_RunningVer != null) { // Check ver IsAllRunningVersionNew = true; if (_PackageResKeys != null) { for (int i = 0; i < _PackageResKeys.Count; ++i) { var key = _PackageResKeys[i]; if (_RunningVer.ContainsKey(key) && _RunningVer[key] < _PackageVer) { IsAllRunningVersionNew = false; _OldRunningKeys = _OldRunningKeys ?? new HashSet <string>(); _OldRunningKeys.Add(key); } } if (Application.platform == RuntimePlatform.Android && !IsAllRunningVersionNew && !ResManager.LoadAssetsFromApk) { try { workcnt += ResManager.AndroidApkZipArchive.Entries.Count; } catch (Exception e) { PlatDependant.LogError(e); } } } if (_ObbResKeys != null) { bool _ObbIsNew = false; for (int i = 0; i < _ObbResKeys.Count; ++i) { var key = _ObbResKeys[i]; if (_RunningVer.ContainsKey(key) && _RunningVer[key] < _ObbVer) { _ObbIsNew = true; IsAllRunningVersionNew = false; _OldRunningKeys = _OldRunningKeys ?? new HashSet <string>(); _OldRunningKeys.Add(key); } } if (_ObbIsNew) { try { workcnt += ResManager.ObbZipArchive.Entries.Count; } catch (Exception e) { PlatDependant.LogError(e); } } } } } if (_RunningVer == null) { if (Application.platform == RuntimePlatform.Android && !ResManager.LoadAssetsFromApk) { try { workcnt += ResManager.AndroidApkZipArchive.Entries.Count; } catch (Exception e) { PlatDependant.LogError(e); } } if (_ObbVer > 0) { try { workcnt += ResManager.ObbZipArchive.Entries.Count; } catch (Exception e) { PlatDependant.LogError(e); } } } if (IsAllRunningVersionNew) { // Check whether the EntrySceneBg is pending to be updated. ResManager.SkipPackage = false; ResManager.SkipObb = false; ResManager.SkipUpdate = false; ResManager.SkipPending = false; List <string> entryPendingAbs = new List <string>(); if (PlatDependant.IsFileExist(ThreadSafeValues.UpdatePath + "/pending/res/ver.txt")) { CapsUnityMainBehav.LoadEntrySceneBg(); foreach (var kvploaded in ResManager.LoadedAssetBundles) { var abname = kvploaded.Key; if (kvploaded.Value.RealName != null) { abname = kvploaded.Value.RealName; } string path = ThreadSafeValues.UpdatePath + "/pending/res/" + abname; if (PlatDependant.IsFileExist(path)) { entryPendingAbs.Add(abname); } } CapsUnityMainBehav.UnloadEntrySceneBg(); } ResManager.SkipPending = true; if (entryPendingAbs.Count > 0) { for (int i = 0; i < entryPendingAbs.Count; ++i) { var abname = entryPendingAbs[i]; var src = ThreadSafeValues.UpdatePath + "/pending/res/" + abname; var dst = ThreadSafeValues.UpdatePath + "/res/" + abname; PlatDependant.MoveFile(src, dst); } } _PendingFiles = PlatDependant.GetAllFiles(ThreadSafeValues.UpdatePath + "/pending/res/"); return(_PendingFiles.Length); } else { ResManager.SkipPackage = false; ResManager.SkipObb = false; ResManager.SkipUpdate = true; ResManager.SkipPending = true; _PendingFiles = PlatDependant.GetAllFiles(ThreadSafeValues.UpdatePath + "/pending/res/"); _UpdateFiles = PlatDependant.GetAllFiles(ThreadSafeValues.UpdatePath + "/res/"); return(workcnt + _PendingFiles.Length + _UpdateFiles.Length); } }
private void Awake() { MainBehavInstance = this; }