Пример #1
0
        /// <summary>
        /// 加载服务器的版本号信息
        /// </summary>
        /// <param name="versionManifestUrl"></param>
        /// <param name="finishCallback"></param>
        /// <returns></returns>
        public IEnumerator LoadRemoteVersionCode(string versionManifestUrl, Action <string> failedCallback, Action <ResponseVersionManifestData> finishCallback)
        {
            // 请求远程最新版本信息
            if (versionManifestUrl.Contains("?"))
            {
                versionManifestUrl += "&__cdn_asset_version__=" + (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalSeconds;
            }
            else
            {
                versionManifestUrl += "?__cdn_asset_version__=" + (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalSeconds;
            }
            WWW www = new WWW(versionManifestUrl);

            yield return(www);

            if (!string.IsNullOrEmpty(www.error))
            {
                CLogger.LogError("VersionMgr::LoadRemoteVersionCode() - request remote_version.manifest error: " + versionManifestUrl + "     " + www.error);
                if (failedCallback != null)
                {
                    CLogger.Log("VersionMgr::LoadRemoteVersionCode() - Request version.manifest failed. Please try again!");
                    failedCallback(www.error);
                }
                www.Dispose();
                yield break;
            }
            // 解析远程最新版本信息
            _remoteVerCode = new BaseVersionData();
            ResponseVersionManifestData manifestData = null;

            try
            {
                manifestData           = JsonUtility.FromJson <ResponseVersionManifestData>(www.text);
                _remoteVerCode.Version = manifestData.version;
            } catch (Exception e)
            {
                CLogger.LogError("VersionMgr::LoadRemoteVersionCode() - parse version.manifest exception:" + e.Message);
                if (failedCallback != null)
                {
                    CLogger.Log("VersionMgr::LoadRemoteVersionCode() - Request version.manifest failed. Please try again!");
                    failedCallback(e.Message);
                }
                www.Dispose();
                yield break;
            }

            manifestData = manifestData != null ? manifestData : new ResponseVersionManifestData();
            CLogger.Log("VersionMgr::LoadRemoteVersionCode() - LoadRemoteVersionCode: " + _remoteVerCode.Version);
            www.Dispose();
            www = null;

            // 加载本地缓存版本文件信息
            if (_localCacheVerDataMgr == null)
            {
                LoadLocalCacheVersionData();
            }

            if (finishCallback != null)
            {
                finishCallback(manifestData);
            }
        }
Пример #2
0
        public bool LoadLocalVersionCode()
        {
            BaseVersionData localVersion     = new BaseVersionData();
            string          localVerFilePath = FileUtils.LocalResRootPath + HotUpdateDefs.kPackageVersionFile;

            bool isCorveringInstallation = false;

            if (File.Exists(localVerFilePath))
            {
                localVersion.Version = JsonUtility.FromJson <ResponseVersionManifestData>(File.ReadAllText(localVerFilePath)).version;
                CLogger.Log("VersionMgr::LoadLocalVersionCode() - Load local version code: " + localVersion.Version);
            }

            var txt = Resources.Load(HotUpdateDefs.kPackageVersionFile);

            if (txt == null)
            {
                CLogger.LogError("VersionMgr::LoadLocalVersionCode() - 缺少包版本文件:Resources/version.manifest!!!");
                return(false);
            }
            BaseVersionData packageVersion = new BaseVersionData();

            packageVersion.Version = JsonUtility.FromJson <ResponseVersionManifestData>(txt.ToString()).version;
            CLogger.Log("VersionMgr::LoadLocalVersionCode() - Load package version code: " + packageVersion.Version);
            if ((packageVersion.Major > localVersion.Major) ||
                (packageVersion.Major == localVersion.Major && packageVersion.Minor > localVersion.Minor) ||
                (packageVersion.Major == localVersion.Major && packageVersion.Minor == localVersion.Minor && packageVersion.Revision > localVersion.Revision))
            {
                // 删除本地热更新的文件缓存
                DeleteAllLocal();

                FileUtils.Instance.CheckDirExistsForFile(localVerFilePath);
                File.WriteAllText(localVerFilePath, JsonUtility.ToJson(new ResponseVersionManifestData()
                {
                    version = packageVersion.Version
                }));
                _localVerCode = packageVersion;

                isCorveringInstallation = true;
            }
            else if (packageVersion.Major < localVersion.Major)
            {
                // 玩家安装了2.0.1的版本后又覆盖安装了1.0.1的版本会出现这种情况,应该删除本地缓存热更大版本
                DeleteAllLocal();

                _localVerCode = packageVersion;

                isCorveringInstallation = true;
            }
            else
            {
                _localVerCode = localVersion;
            }

            Resources.UnloadAsset(txt);

            PlayerPrefs.SetInt("isCorveringInstallation", isCorveringInstallation ? 1 : 0);

            CLogger.Log("VersionMgr::LoadLocalVersionCode() - Client version code: " + _localVerCode.Version);

            //CDebugInfo debug_info = GameObject.Find("UIRoot/Canvas/Debug").GetComponent<CDebugInfo>();
            //debug_info.m_HotUpdateVersion.text = "HUVer: " + _localVerCode.Version;

            return(true);
        }
Пример #3
0
 public bool Equals(BaseVersionData other)
 {
     return(Version == other.Version);
 }