/// <summary> /// 以客户端安装包默认的资源版本配置为基准创建一个新的本地缓存 /// </summary> /// <param name="remoteVersions"></param> public void CreateVersionsCached(ref ResDataVersion remoteVersions) { string path = AppPaths.PersistentResDataRoot.Append(ResDataVersion.FILE_RES_DATA_VERSIONS_NAME); string data = FileOperater.ReadUTF8Text(path); ResDataVersion temp = JsonUtility.FromJson <ResDataVersion>(data); if (temp == default || temp.IsVersionsEmpty()) { #if LOG_CLIENT_VERSIONING "log".Log("Verision data is empty, will create new one."); #endif temp = new ResDataVersion { res_gateway = remoteVersions.res_gateway, app_version = remoteVersions.app_version, res_version = remoteVersions.res_version }; ResDataVersion client = Versions; temp.CloneVersionsFrom(ref client); } else { } CachedVersion = temp; CachedVersion.resVersionType = ResDataVersionType.Cached; }
private void ClosePreviewVersions() { mIsShowPreview = false; if (mBeforePreview != default) { m_Res = mBeforePreview; } else { } }
private void PreviewVersionsData() { if (m_Preview != default) { mBeforePreview = m_Res; mIsShowPreview = true; m_Res = JsonUtility.FromJson <ResDataVersion>(m_Preview.text); } else { } }
private void OnLoadComplete(bool success, Loader.Loader target) { if (success) { string json = target.TextData; target.Dispose(); ResDataVersion remoteVersions = JsonUtility.FromJson <ResDataVersion>(json); remoteVersions.resVersionType = ResDataVersionType.Remote; CreateVersionsCached(ref remoteVersions); RemoteAppVersion = remoteVersions.app_version; if (VersionInvalidHandler != default) { bool flag = VersionInvalidHandler(); if (flag) { #if LOG_CLIENT_VERSIONING "warning:There have a newer App inistaller.".Log(); #endif return; } else { } } else { } mRemoteResVersion = remoteVersions.res_version; List <ResVersion> resUpdate = CachedVersion.CheckUpdates(Versions, ref remoteVersions); CachedVersion.WriteAsCached(); #if LOG_CLIENT_VERSIONING "log:Remote res update count is {0}".Log(resUpdate.Count.ToString()); "log:UpdateHandler is null: {0}".Log((UpdateHandler == default).ToString()); #endif if (resUpdate.Count == 0) { UpdateHandler?.Invoke(true, 1f); } else { StartLoadPatchRes(ref resUpdate); } } else { "error: Load remote version failed, url is {0}".Log(target.Url); } }
/// <summary> /// 从另一个资源版本对象复制数据 /// </summary> /// <param name="copyFrom"></param> public void CloneVersionsFrom(ref ResDataVersion copyFrom) { Clean(false, true); if (copyFrom.IsVersionsEmpty()) { copyFrom.Init(); } else { } app_version = copyFrom.app_version; res_version = copyFrom.res_version; res_gateway = copyFrom.res_gateway; ResVersion item; int resSize = copyFrom.res.Length; res = new ResVersion[resSize]; for (int i = 0; i < resSize; i++) { item = copyFrom.res[i]; res[i] = ResVersion.CreateNew(item.name, item.version, item.file_size); } int updatingsSize = copyFrom.updatings != default ? copyFrom.updatings.Length : 0; updatings = new ResUpdating[updatingsSize]; for (int i = 0; i < updatingsSize; i++) { updatings[i] = new ResUpdating() { name = copyFrom.updatings[i].name, version = copyFrom.updatings[i].version, }; } res_total = res.Length; updating_total = updatings.Length; }
private void CheckResVersions(int max, ref string[] abNames, ref ResDataVersion remoteVers, bool isUpdateVersion, ref List <string> changeds) { string abName = string.Empty; ResVersion item, remote = default; for (int i = 0; i < max; i++) { abName = abNames[i]; item = GetResVersion(abName); int baseVersion = item == default ? DEFAULT_VERSION : item.version;//若未找到对应的资源版本,基于默认的版本号进行设置 if (remoteVers != default) { remote = remoteVers.GetResVersion(abName); baseVersion = remote != default ? remote.version : baseVersion;//若已存在线上版本,基于线上版本号进行设置 } else { } NewResVersion(baseVersion, isUpdateVersion, ref item, ref abName); UpdateVersionChange(ref changeds, ref abName, ref item); } }
/// <summary> /// 检查版本差异 /// </summary> /// <param name="clientVersions"></param> /// <param name="remoteVersions"></param> /// <returns></returns> public List <ResVersion> CheckUpdates(ResDataVersion clientVersions, ref ResDataVersion remoteVersions) { if (clientVersions.resVersionType != ResDataVersionType.Client || remoteVersions.resVersionType != ResDataVersionType.Remote) { return(new List <ResVersion>(0)); } else { } bool isVersionsEmpty = IsVersionsEmpty(); if (isVersionsEmpty) { CloneVersionsFrom(ref clientVersions);//复制安装包中默认的资源版本 } else { } Init(); ResVersion remoteItem = default, cachedItem = default;
/// <summary> /// 新建一个资源版本 /// </summary> /// <param name="remoteRootURL">远端资源服务器网关</param> /// <param name="isUpdateVersion">是否迭代资源版本</param> /// <param name="isUpdateResVersion">是否迭代资源大版本</param> /// <param name="isSyncAppVersion">是否同步应用版本</param> /// <param name="remoteVers">远端资源服务器的资源配置</param> /// <param name="abNames">需要迭代版本的资源名</param> public void CreateNewResVersion(ref string remoteRootURL, bool isUpdateVersion, bool isUpdateResVersion, bool isSyncAppVersion, ref ResDataVersion remoteVers, ref string[] abNames) { res_gateway = remoteRootURL; Init(); remoteVers?.Init(); CheckMainManifestVersion(ref abNames); FillChangedABList(out List <string> changeds); int max = abNames.Length; CheckTotalVersion(isUpdateResVersion, isSyncAppVersion, max); CheckResVersions(max, ref abNames, ref remoteVers, isUpdateVersion, ref changeds); }