Пример #1
0
        /// <summary>
        /// 获取文件更新列表
        /// </summary>
        /// <param name="resUrl">更新url</param>
        /// <returns>迭代器</returns>
        private IEnumerator UpdateList(string resUrl)
        {
            App.TriggerGlobal(AutoUpdateEvents.ON_UPDATE_START, this)
            .SetEventLevel(EventLevel.Global)
            .Trigger();

            resUrl = resUrl + Path.AltDirectorySeparatorChar + Env.PlatformToName(Env.SwitchPlatform);
            var request = UnityWebRequest.Get(resUrl + Path.AltDirectorySeparatorChar + UpdateFileStore.FILE_NAME);

            yield return(request.Send());

            if (request.isError || request.responseCode != 200)
            {
                isUpdate = false;
                App.TriggerGlobal(AutoUpdateEvents.ON_UPDATE_LIST_FAILED, this)
                .SetEventLevel(EventLevel.Global)
                .Trigger();
                yield break;
            }

            App.TriggerGlobal(AutoUpdateEvents.ON_SCANNING_DISK_FILE_HASH_START, this)
            .SetEventLevel(EventLevel.Global)
            .Trigger();

            var fileStore = App.Make <UpdateFileStore>();
            var newLst    = fileStore.LoadFromBytes(request.downloadHandler.data);
            var oldLst    = new UpdateFile(); //fileStore.LoadFromPath(Env.AssetPath);

            Disk.Root.Create();
            Disk.Root.Walk((file) =>
            {
                if (Util.StandardPath(file.FullName).EndsWith(".meta"))
                {
                    return;
                }
                var fullName  = Util.StandardPath(file.FullName);
                var assetName = fullName.Substring(Env.AssetPath.Length);
                oldLst.Append(assetName, Hash.FileMd5(file.FullName), file.Length);
            });

            App.TriggerGlobal(AutoUpdateEvents.ON_SCANNING_DISK_FILE_HASH_END, this)
            .SetEventLevel(EventLevel.Global)
            .Trigger();

            UpdateFile needUpdateLst, needDeleteLst;

            oldLst.Comparison(newLst, out needUpdateLst, out needDeleteLst);

            yield return(DeleteOldAsset(needDeleteLst));

            yield return(UpdateAssetFromUrl(needUpdateLst, resUrl));

            fileStore.Save(Env.AssetPath, newLst);

            App.TriggerGlobal(AutoUpdateEvents.ON_UPDATE_COMPLETE, this)
            .SetEventLevel(EventLevel.Global)
            .Trigger();
        }
Пример #2
0
        /// <summary>
        /// 获取文件更新列表
        /// </summary>
        /// <returns></returns>
        protected IEnumerator UpdateList(string resUrl)
        {
            base.Event.Trigger(AutoUpdateEvents.ON_UPDATE_START);
            resUrl = resUrl + Path.AltDirectorySeparatorChar + Env.PlatformToName(Env.SwitchPlatform);
            UnityWebRequest request = UnityWebRequest.Get(resUrl + Path.AltDirectorySeparatorChar + UpdateFileStore.FILE_NAME);

            yield return(request.Send());

            if (request.isError || request.responseCode != 200)
            {
                this.isUpdate = false;
                base.Event.Trigger(AutoUpdateEvents.ON_UPDATE_LIST_FAILED);
                yield break;
            }

            base.Event.Trigger(AutoUpdateEvents.ON_SCANNING_DISK_FILE_HASH_START);

            var fileStore = new UpdateFileStore();
            var newLst    = fileStore.LoadFromBytes(request.downloadHandler.data);
            var oldLst    = new UpdateFile(); //fileStore.LoadFromPath(Env.AssetPath);

            Disk.Root.Create();
            Disk.Root.Walk((file) => {
                if (!file.FullName.Standard().EndsWith(".meta"))
                {
                    string fullName  = file.FullName.Standard();
                    string assetName = fullName.Substring(Env.AssetPath.Length);
                    oldLst.Append(assetName, Hash.FileHash(file.FullName), file.Length);
                }
            });

            base.Event.Trigger(AutoUpdateEvents.ON_SCANNING_DISK_FILE_HASH_END);

            UpdateFile needUpdateLst, needDeleteLst;

            oldLst.Comparison(newLst, out needUpdateLst, out needDeleteLst);

            yield return(this.DeleteOldAsset(needDeleteLst));

            yield return(this.UpdateAssetFromUrl(needUpdateLst, resUrl));

            fileStore.Save(Env.AssetPath, newLst);

            base.Event.Trigger(AutoUpdateEvents.ON_UPDATE_COMPLETE);
        }