From 945842c0e761e1c7e21b7aa474592759df417715 Mon Sep 17 00:00:00 2001 From: jcakCheng Date: Mon, 9 Sep 2024 19:52:42 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=85=A8=E9=83=A8=E7=BC=93=E5=AD=98=E5=92=8C?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=97=A0=E7=94=A8=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/YooAsset/Runtime/YooAssets.cs | 2 + .../WXFSClearAllBundleFilesOperation.cs.meta | 11 ++ .../WXFSClearUnusedBundleFilesAsync.cs | 186 ++++++++++++++++++ .../WXFSClearUnusedBundleFilesAsync.cs.meta | 11 ++ .../WechatFileSystem/WechatFileSystem.cs | 63 ++++-- .../FsmNode/FsmClearPackageCache.cs | 16 ++ .../FsmNode/FsmInitializePackage.cs | 8 + 7 files changed, 285 insertions(+), 12 deletions(-) create mode 100644 Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearAllBundleFilesOperation.cs.meta create mode 100644 Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs create mode 100644 Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs.meta diff --git a/Assets/YooAsset/Runtime/YooAssets.cs b/Assets/YooAsset/Runtime/YooAssets.cs index 8a762d70..e8a90e0e 100644 --- a/Assets/YooAsset/Runtime/YooAssets.cs +++ b/Assets/YooAsset/Runtime/YooAssets.cs @@ -12,6 +12,8 @@ namespace YooAsset private static GameObject _driver = null; private static readonly List _packages = new List(); + public const string DefaultPackageVersion_Key = "DefaultPackageVersion_Key"; + /// /// 是否已经初始化 /// diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearAllBundleFilesOperation.cs.meta b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearAllBundleFilesOperation.cs.meta new file mode 100644 index 00000000..984245b4 --- /dev/null +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearAllBundleFilesOperation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d48600eb90915544586c0108b94cfd02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs new file mode 100644 index 00000000..c3384c92 --- /dev/null +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs @@ -0,0 +1,186 @@ +#if UNITY_WEBGL && WEIXINMINIGAME +using System.Collections.Generic; +using WeChatWASM; +using YooAsset; +using UnityEngine; +using System.Linq; + +internal class WXFSClearUnusedBundleFilesAsync : FSClearUnusedBundleFilesOperation +{ + private enum ESteps + { + None, + LoadCachePackageInfo, + VerifyFileData, + LoadManifest, + GetUnusedCacheFiles, + ClearUnusedCacheFiles, + Done, + } + + private WechatFileSystem _fileSystem; + private readonly PackageManifest _manifest; + private PackageManifest _cacheManifest; + private List _unusedBundleGUIDs; + private ESteps _steps = ESteps.None; + private DeserializeManifestOperation _deserializer; + private byte[] _fileData; + private string _packageHash; + private int _unusedFileTotalCount = 0; + private string _lastPackageVersion; + + internal WXFSClearUnusedBundleFilesAsync(WechatFileSystem fileSystem, PackageManifest manifest) + { + _fileSystem = fileSystem; + _manifest = manifest; + } + internal override void InternalOnStart() + { + _steps = ESteps.LoadCachePackageInfo; + } + internal override void InternalOnUpdate() + { + if (_steps == ESteps.None || _steps == ESteps.Done) + return; + + if (_steps == ESteps.LoadCachePackageInfo) + { + LoadManifestInfo(); + if(_fileData != null && _fileData.Length > 0 && !string.IsNullOrEmpty(_packageHash)) + { + _steps = ESteps.VerifyFileData; + Debug.Log($"===_packageHash==={_packageHash}"); + } + else + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = "Failed to load cache package manifest file!"; + } + + //YooLogger.Log($"Found unused cache files count : {_unusedFileTotalCount}"); + } + + if(_steps == ESteps.VerifyFileData) + { + string fileHash = HashUtility.BytesMD5(_fileData); + if (fileHash == _packageHash) + { + _steps = ESteps.LoadManifest; + } + else + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = "Failed to verify cache package manifest file!"; + } + } + + if (_steps == ESteps.LoadManifest) + { + if (_deserializer == null) + { + _deserializer = new DeserializeManifestOperation(_fileData); + OperationSystem.StartOperation(_fileSystem.PackageName, _deserializer); + } + + Progress = _deserializer.Progress; + if (_deserializer.IsDone == false) + return; + + if (_deserializer.Status == EOperationStatus.Succeed) + { + _steps = ESteps.GetUnusedCacheFiles; + _cacheManifest = _deserializer.Manifest; + } + else + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = _deserializer.Error; + } + } + + if(_steps == ESteps.GetUnusedCacheFiles) + { + _unusedBundleGUIDs = GetUnusedBundleGUIDs(); + _unusedFileTotalCount = _unusedBundleGUIDs.Count; + _steps = ESteps.ClearUnusedCacheFiles; + YooLogger.Log($"Found unused cache files count : {_unusedFileTotalCount}"); + } + + if (_steps == ESteps.ClearUnusedCacheFiles) + { + for (int i = _unusedBundleGUIDs.Count - 1; i >= 0; i--) + { + string bundleGUID = _unusedBundleGUIDs[i]; + PackageBundle bundle = null; + if(_cacheManifest.TryGetPackageBundleByBundleGUID(bundleGUID,out bundle)) + { + if (bundle != null) + { + var cachePath = GetUnuseCachePathByBundleName(bundle.FileName); + WX.RemoveFile(cachePath, (bool isOk) => + { + Debug.Log($"{_unusedBundleGUIDs.Count}---删除缓存文件路径成功====={cachePath}=="); + //_unusedBundleGUIDs.Remove(cachePath); + }); + + //_fileSystem.DeleteCacheFile(bundleGUID); + _unusedBundleGUIDs.RemoveAt(i); + } + } + + if (OperationSystem.IsBusy) + break; + } + + if (_unusedFileTotalCount == 0) + Progress = 1.0f; + else + Progress = 1.0f - (_unusedBundleGUIDs.Count / _unusedFileTotalCount); + + if (_unusedBundleGUIDs.Count == 0) + { + _steps = ESteps.Done; + Status = EOperationStatus.Succeed; + } + } + } + + private List GetUnusedBundleGUIDs() + { + var allBundleGUIDs = _cacheManifest.BundleDic3.Keys.ToList(); + List result = new List(allBundleGUIDs.Count); + foreach (var bundleGUID in allBundleGUIDs) + { + if (_manifest.IsIncludeBundleFile(bundleGUID) == false) + { + result.Add(bundleGUID); + } + } + return result; + } + + private void LoadManifestInfo() + { + var packageName = _fileSystem.PackageName; + _lastPackageVersion = WX.StorageGetStringSync(YooAssets.DefaultPackageVersion_Key, "100000"); + Debug.Log($"==========取出本地数据版本文件成功==={_lastPackageVersion}"); + if (!string.IsNullOrEmpty(_lastPackageVersion)) + { + var cacheManifestHashPath = GetUnuseCachePathByBundleName(YooAssetSettingsData.GetPackageHashFileName(packageName, _lastPackageVersion)); + var cacheManifestPath = GetUnuseCachePathByBundleName(YooAssetSettingsData.GetManifestBinaryFileName(packageName, _lastPackageVersion)); + + _packageHash = _fileSystem.ReadFileText(cacheManifestHashPath); + _fileData = _fileSystem.ReadFileData(cacheManifestPath); + } + } + + private string GetUnuseCachePathByBundleName(string fileName) + { + var path = $"StreamingAssets/WebGL/v{WechatFileSystemCreater.AppVersion}/{fileName}"; + return WX.GetCachePath(path); + } +} +#endif \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs.meta b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs.meta new file mode 100644 index 00000000..f660e19c --- /dev/null +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4938d8a5a9d7f24db37f8df6b32501f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs index 894a3bd1..349b641c 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs @@ -6,13 +6,18 @@ using WeChatWASM; public static class WechatFileSystemCreater { - public static FileSystemParameters CreateWechatFileSystemParameters(IRemoteServices remoteServices) + public static FileSystemParameters CreateWechatFileSystemParameters(IRemoteServices remoteServices,string rootDirectory = null) { string fileSystemClass = $"{nameof(WechatFileSystem)},YooAsset.RuntimeExtension"; - var fileSystemParams = new FileSystemParameters(fileSystemClass, null); + var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); fileSystemParams.AddParameter("REMOTE_SERVICES", remoteServices); return fileSystemParams; } + + /// + /// AppVersion + /// + public static string AppVersion { get; set; } } /// @@ -82,12 +87,12 @@ internal class WechatFileSystem : IFileSystem } } - #region 自定义参数 +#region 自定义参数 /// /// 自定义参数:远程服务接口 /// public IRemoteServices RemoteServices { private set; get; } = null; - #endregion +#endregion public WechatFileSystem() @@ -113,13 +118,13 @@ internal class WechatFileSystem : IFileSystem } public virtual FSClearAllBundleFilesOperation ClearAllBundleFilesAsync() { - var operation = new FSClearAllBundleFilesCompleteOperation(); + var operation = new WXFSClearAllBundleFilesOperation(this); OperationSystem.StartOperation(PackageName, operation); return operation; } public virtual FSClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync(PackageManifest manifest) { - var operation = new FSClearUnusedBundleFilesCompleteOperation(); + var operation = new WXFSClearUnusedBundleFilesAsync(this, manifest); OperationSystem.StartOperation(PackageName, operation); return operation; } @@ -167,7 +172,7 @@ internal class WechatFileSystem : IFileSystem } _fileSystemManager = WX.GetFileSystemManager(); - _fileCacheRoot = WX.env.USER_DATA_PATH; //注意:如果有子目录,请修改此处! + _fileCacheRoot = rootDirectory;// WX.PluginCachePath; //WX.env.USER_DATA_PATH; //注意:如果有子目录,请修改此处! } public virtual void OnUpdate() { @@ -179,9 +184,9 @@ internal class WechatFileSystem : IFileSystem } public virtual bool Exists(PackageBundle bundle) { - string filePath = GetCacheFileLoadPath(bundle); - string result = _fileSystemManager.AccessSync(filePath); - return result.Equals("access:ok"); + string filePath = GetWXFileLoadPath(bundle); + //Debug.Log($"CacheFile:{WX.GetCachePath($"StreamingAssets/WebGL/v1.0.0/{bundle.FileName}")}"); + return CheckWXFileIsExist(filePath); } public virtual bool NeedDownload(PackageBundle bundle) { @@ -207,8 +212,42 @@ internal class WechatFileSystem : IFileSystem { throw new System.NotImplementedException(); } + public byte[] ReadFileData(string filePath) + { + if (CheckWXFileIsExist(filePath)) + return _wxFileSystemMgr.ReadFileSync(filePath); + else + return Array.Empty(); + //throw new System.NotImplementedException(); + } - #region 内部方法 + public string ReadFileText(string filePath) + { + if(CheckWXFileIsExist(filePath)) + return _wxFileSystemMgr.ReadFileSync(filePath, "utf8"); + else + return string.Empty; + //throw new System.NotImplementedException(); + } + /// + /// 获取所有缓存文件的路径 + /// + /// + public Dictionary GetWXAllCacheFilePath() + { + return _wxFilePaths; + } + /// + /// 判断微信缓存文件是否存在 + /// + /// + /// + public bool CheckWXFileIsExist(string filePath) + { + string result = _wxFileSystemMgr.AccessSync(filePath); + return result.Equals("access:ok"); + } +#region 内部方法 private string GetCacheFileLoadPath(PackageBundle bundle) { if (_cacheFilePaths.TryGetValue(bundle.BundleGUID, out string filePath) == false) @@ -218,6 +257,6 @@ internal class WechatFileSystem : IFileSystem } return filePath; } - #endregion +#endregion } #endif \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs index b64b29bb..eabb992e 100644 --- a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs +++ b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs @@ -32,6 +32,22 @@ internal class FsmClearPackageCache : IStateNode private void Operation_Completed(YooAsset.AsyncOperationBase obj) { +#if UNITY_WEBGL || WEIXINMINIGAME + + //删除旧的资源清单文件和哈希文件 + if (WX.StorageHasKeySync(YooAssets.DefaultPackageVersion_Key)) + { + var packageName = (string)_machine.GetBlackboardValue("PackageName"); + var packageVersion = (string)_machine.GetBlackboardValue("PackageVersion"); + var lastPackageVersion = WX.StorageGetStringSync(YooAssets.DefaultPackageVersion_Key, ""); + if (!string.IsNullOrEmpty(lastPackageVersion) && lastPackageVersion != packageVersion) + { + WX.StorageSetStringSync(YooAssets.DefaultPackageVersion_Key, packageVersion); + Debug.Log($"==========本地数据版本文件设置成功==={packageVersion}"); + + } + } +#endif _machine.ChangeState(); } } \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs index b986cb89..cb88dee4 100644 --- a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs +++ b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs @@ -74,7 +74,15 @@ internal class FsmInitializePackage : IStateNode if (playMode == EPlayMode.WebPlayMode) { var createParameters = new WebPlayModeParameters(); +#if UNITY_WEBGL && WEIXINMINIGAME && !UNITY_EDITOR + string defaultHostServer = GetHostServerURL(); + string fallbackHostServer = GetHostServerURL(); + IRemoteServices remoteServices = new RemoteServices(defaultHostServer, fallbackHostServer); + var rootDir = string.Format("{0}/{1}", WX.PluginCachePath, $"StreamingAssets/WebGL/v1.0.0");//这个1.0.0是App大版本文件,转微信小游戏后,没删除 + createParameters.WebFileSystemParameters = WechatFileSystemCreater.CreateWechatFileSystemParameters(remoteServices, rootDir); +#else createParameters.WebFileSystemParameters = FileSystemParameters.CreateDefaultWebFileSystemParameters(); +#endif initializationOperation = package.InitializeAsync(createParameters); } From 4bbcc3c73d18f9db3d825f5998712d6883c97f94 Mon Sep 17 00:00:00 2001 From: jcakCheng Date: Mon, 9 Sep 2024 20:03:07 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=8F=E7=9A=84?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs index eabb992e..cee5babf 100644 --- a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs +++ b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs @@ -32,7 +32,7 @@ internal class FsmClearPackageCache : IStateNode private void Operation_Completed(YooAsset.AsyncOperationBase obj) { -#if UNITY_WEBGL || WEIXINMINIGAME +#if UNITY_WEBGL && WEIXINMINIGAME //删除旧的资源清单文件和哈希文件 if (WX.StorageHasKeySync(YooAssets.DefaultPackageVersion_Key)) From 0627641845cdc83ae1dcaa1f5a0c9ecc51108623 Mon Sep 17 00:00:00 2001 From: jcakCheng Date: Mon, 9 Sep 2024 20:33:28 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E5=B0=8F=E6=B8=B8=E6=88=8F=E5=88=A0=E9=99=A4=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E6=A0=B9=E7=9B=AE=E5=BD=95=E4=B9=8B=E5=90=8E=E9=87=8D=E5=90=AF?= =?UTF-8?q?=E5=B0=8F=E6=B8=B8=E6=88=8F=E9=80=BB=E8=BE=91=EF=BC=8CWX.CleanA?= =?UTF-8?q?llFileCache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WechatFileSystem/WechatFileSystem.cs | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs index 349b641c..6e5db091 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs @@ -247,6 +247,58 @@ internal class WechatFileSystem : IFileSystem string result = _wxFileSystemMgr.AccessSync(filePath); return result.Equals("access:ok"); } +#region 调用微信小游戏接口删除缓存文件目录下所有文件 + public void ClearAllCacheFile() + { +#if !UNITY_EDITOR && UNITY_WEBGL && WEIXINMINIGAME + ShowModalOption showModalOp = new ShowModalOption(); + showModalOp.title = "提示"; + showModalOp.content = "是否确定要清理缓存并重启"; + showModalOp.confirmText = "确定"; + showModalOp.cancelText = "取消"; + showModalOp.complete = (GeneralCallbackResult callResult) => { Debug.Log($"complete==={callResult.errMsg}"); }; + showModalOp.fail = (GeneralCallbackResult callResult) => { Debug.Log($"fail==={callResult.errMsg}"); }; + showModalOp.success = (ShowModalSuccessCallbackResult callResult) => + { + if(callResult.confirm) + RestartMiniGame(); + }; + WX.ShowModal(showModalOp); +#endif + } + + /// + /// 微信小游戏清除缓存并且重启小游戏 + /// 参考小游戏=>出发吧麦芬 + /// + private void RestartMiniGame() + { + WX.CleanAllFileCache((bool isOk) => + { + RestartMiniProgramOption restartMini = new RestartMiniProgramOption(); + restartMini.complete = RestartMiniComplete; + restartMini.fail = RestartMiniFailComplete; + restartMini.success = RestartMiniSuccComplete; + WX.RestartMiniProgram(restartMini); + }); + } + + private void RestartMiniComplete(GeneralCallbackResult result) + { + Debug.Log($"RestartMiniComplete:{result.errMsg}"); + } + + private void RestartMiniFailComplete(GeneralCallbackResult result) + { + Debug.Log($"RestartMiniFailComplete:{result.errMsg}"); + } + + private void RestartMiniSuccComplete(GeneralCallbackResult result) + { + Debug.Log($"RestartMiniSuccComplete:{result.errMsg}"); + } + +#endregion #region 内部方法 private string GetCacheFileLoadPath(PackageBundle bundle) { From e0427d3062748027b29fa4e6a1829052fad2d69a Mon Sep 17 00:00:00 2001 From: jcakCheng Date: Fri, 13 Sep 2024 11:44:40 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=B0=8F=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=EF=BC=8CPackageVersion=E8=AF=B7=E6=B1=82url=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=5FappendTimeTicks;=E4=BF=AE=E6=94=B9unusedCache?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/YooAsset/Runtime/YooAssets.cs | 1 + .../WXFSClearUnusedBundleFilesAsync.cs | 10 ++++----- .../WXFSRequestPackageVersionOperation.cs | 6 +++-- .../RequestWechatPackageVersionOperation.cs | 16 +++++++++++--- .../WechatFileSystem/WechatFileSystem.cs | 2 +- .../FsmNode/FsmClearPackageCache.cs | 22 +++++++++---------- 6 files changed, 33 insertions(+), 24 deletions(-) diff --git a/Assets/YooAsset/Runtime/YooAssets.cs b/Assets/YooAsset/Runtime/YooAssets.cs index e8a90e0e..0a841f53 100644 --- a/Assets/YooAsset/Runtime/YooAssets.cs +++ b/Assets/YooAsset/Runtime/YooAssets.cs @@ -13,6 +13,7 @@ namespace YooAsset private static readonly List _packages = new List(); public const string DefaultPackageVersion_Key = "DefaultPackageVersion_Key"; + public const string DefaultPcakageVersion = "100000"; /// /// 是否已经初始化 diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs index c3384c92..3a34cbf4 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs @@ -49,7 +49,6 @@ internal class WXFSClearUnusedBundleFilesAsync : FSClearUnusedBundleFilesOperati if(_fileData != null && _fileData.Length > 0 && !string.IsNullOrEmpty(_packageHash)) { _steps = ESteps.VerifyFileData; - Debug.Log($"===_packageHash==={_packageHash}"); } else { @@ -57,8 +56,6 @@ internal class WXFSClearUnusedBundleFilesAsync : FSClearUnusedBundleFilesOperati Status = EOperationStatus.Failed; Error = "Failed to load cache package manifest file!"; } - - //YooLogger.Log($"Found unused cache files count : {_unusedFileTotalCount}"); } if(_steps == ESteps.VerifyFileData) @@ -165,12 +162,13 @@ internal class WXFSClearUnusedBundleFilesAsync : FSClearUnusedBundleFilesOperati private void LoadManifestInfo() { var packageName = _fileSystem.PackageName; - _lastPackageVersion = WX.StorageGetStringSync(YooAssets.DefaultPackageVersion_Key, "100000"); + _lastPackageVersion = WX.StorageGetStringSync(YooAssets.DefaultPackageVersion_Key, YooAssets.DefaultPcakageVersion); Debug.Log($"==========取出本地数据版本文件成功==={_lastPackageVersion}"); if (!string.IsNullOrEmpty(_lastPackageVersion)) { var cacheManifestHashPath = GetUnuseCachePathByBundleName(YooAssetSettingsData.GetPackageHashFileName(packageName, _lastPackageVersion)); var cacheManifestPath = GetUnuseCachePathByBundleName(YooAssetSettingsData.GetManifestBinaryFileName(packageName, _lastPackageVersion)); + if(string.IsNullOrEmpty(cacheManifestHashPath) || string.IsNullOrEmpty(cacheManifestPath)) { return; } _packageHash = _fileSystem.ReadFileText(cacheManifestHashPath); _fileData = _fileSystem.ReadFileData(cacheManifestPath); @@ -179,8 +177,8 @@ internal class WXFSClearUnusedBundleFilesAsync : FSClearUnusedBundleFilesOperati private string GetUnuseCachePathByBundleName(string fileName) { - var path = $"StreamingAssets/WebGL/v{WechatFileSystemCreater.AppVersion}/{fileName}"; - return WX.GetCachePath(path); + var filePath = $"StreamingAssets/WebGL/{fileName}"; + return WX.GetCachePath(filePath); } } #endif \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSRequestPackageVersionOperation.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSRequestPackageVersionOperation.cs index 0ca200d4..e9f90fee 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSRequestPackageVersionOperation.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSRequestPackageVersionOperation.cs @@ -11,14 +11,16 @@ internal class WXFSRequestPackageVersionOperation : FSRequestPackageVersionOpera } private readonly WechatFileSystem _fileSystem; + private readonly bool _appendTimeTicks; private readonly int _timeout; private RequestWechatPackageVersionOperation _requestWebPackageVersionOp; private ESteps _steps = ESteps.None; - internal WXFSRequestPackageVersionOperation(WechatFileSystem fileSystem, int timeout) + internal WXFSRequestPackageVersionOperation(WechatFileSystem fileSystem, bool appendTimeTicks, int timeout) { _fileSystem = fileSystem; + _appendTimeTicks = appendTimeTicks; _timeout = timeout; } internal override void InternalOnStart() @@ -34,7 +36,7 @@ internal class WXFSRequestPackageVersionOperation : FSRequestPackageVersionOpera { if (_requestWebPackageVersionOp == null) { - _requestWebPackageVersionOp = new RequestWechatPackageVersionOperation(_fileSystem, _timeout); + _requestWebPackageVersionOp = new RequestWechatPackageVersionOperation(_fileSystem, _appendTimeTicks, _timeout); OperationSystem.StartOperation(_fileSystem.PackageName, _requestWebPackageVersionOp); } diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/internal/RequestWechatPackageVersionOperation.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/internal/RequestWechatPackageVersionOperation.cs index f4856ca6..75fc169b 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/internal/RequestWechatPackageVersionOperation.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/internal/RequestWechatPackageVersionOperation.cs @@ -12,6 +12,7 @@ internal class RequestWechatPackageVersionOperation : AsyncOperationBase private readonly WechatFileSystem _fileSystem; private readonly int _timeout; + private readonly bool _appendTimeTicks; private UnityWebTextRequestOperation _webTextRequestOp; private int _requestCount = 0; private ESteps _steps = ESteps.None; @@ -22,9 +23,10 @@ internal class RequestWechatPackageVersionOperation : AsyncOperationBase public string PackageVersion { private set; get; } - public RequestWechatPackageVersionOperation(WechatFileSystem fileSystem, int timeout) + public RequestWechatPackageVersionOperation(WechatFileSystem fileSystem, bool appendTimeTicks, int timeout) { _fileSystem = fileSystem; + _appendTimeTicks = appendTimeTicks; _timeout = timeout; } internal override void InternalOnStart() @@ -78,11 +80,19 @@ internal class RequestWechatPackageVersionOperation : AsyncOperationBase private string GetRequestURL(string fileName) { + string url; + // 轮流返回请求地址 if (_requestCount % 2 == 0) - return _fileSystem.RemoteServices.GetRemoteMainURL(fileName); + url = _fileSystem.RemoteServices.GetRemoteMainURL(fileName); else - return _fileSystem.RemoteServices.GetRemoteFallbackURL(fileName); + url = _fileSystem.RemoteServices.GetRemoteFallbackURL(fileName); + + // 在URL末尾添加时间戳 + if (_appendTimeTicks) + return $"{url}?{System.DateTime.UtcNow.Ticks}"; + else + return url; } } #endif \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs index 6e5db091..13d8d74f 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs @@ -112,7 +112,7 @@ internal class WechatFileSystem : IFileSystem } public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks, int timeout) { - var operation = new WXFSRequestPackageVersionOperation(this, timeout); + var operation = new WXFSRequestPackageVersionOperation(this, appendTimeTicks, timeout); OperationSystem.StartOperation(PackageName, operation); return operation; } diff --git a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs index cee5babf..f14b35dc 100644 --- a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs +++ b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs @@ -34,19 +34,17 @@ internal class FsmClearPackageCache : IStateNode { #if UNITY_WEBGL && WEIXINMINIGAME - //删除旧的资源清单文件和哈希文件 - if (WX.StorageHasKeySync(YooAssets.DefaultPackageVersion_Key)) + //删除旧的资源清单文件和哈希文件 + if (WX.StorageHasKeySync(YooAssets.DefaultPackageVersion_Key)) + { + var packageName = (string)_machine.GetBlackboardValue("PackageName"); + var packageVersion = (string)_machine.GetBlackboardValue("PackageVersion"); + var lastPackageVersion = WX.StorageGetStringSync(YooAssets.DefaultPackageVersion_Key, ""); + if (lastPackageVersion != packageVersion) { - var packageName = (string)_machine.GetBlackboardValue("PackageName"); - var packageVersion = (string)_machine.GetBlackboardValue("PackageVersion"); - var lastPackageVersion = WX.StorageGetStringSync(YooAssets.DefaultPackageVersion_Key, ""); - if (!string.IsNullOrEmpty(lastPackageVersion) && lastPackageVersion != packageVersion) - { - WX.StorageSetStringSync(YooAssets.DefaultPackageVersion_Key, packageVersion); - Debug.Log($"==========本地数据版本文件设置成功==={packageVersion}"); - - } - } + WX.StorageSetStringSync(YooAssets.DefaultPackageVersion_Key, packageVersion); + } + } #endif _machine.ChangeState(); } From 093dd25e0f9f1767a88dcb57ec10c7ff9e711d24 Mon Sep 17 00:00:00 2001 From: jcakCheng Date: Fri, 13 Sep 2024 20:59:46 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=B0=8F=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=EF=BC=8C=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E8=87=B3WechatFileSystem,=E4=BF=AE=E6=94=B9packagever?= =?UTF-8?q?sion=E7=BC=93=E5=AD=98=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WXFSClearAllBundleFilesOperation.cs | 88 +++++++++++++++++ .../WXFSClearUnusedBundleFilesAsync.cs | 44 +++++++-- .../WechatFileSystem/WechatFileSystem.cs | 98 +++++-------------- .../FsmNode/FsmClearPackageCache.cs | 14 --- .../FsmNode/FsmInitializePackage.cs | 9 +- 5 files changed, 152 insertions(+), 101 deletions(-) create mode 100644 Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearAllBundleFilesOperation.cs diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearAllBundleFilesOperation.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearAllBundleFilesOperation.cs new file mode 100644 index 00000000..e65e51fc --- /dev/null +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearAllBundleFilesOperation.cs @@ -0,0 +1,88 @@ +#if UNITY_WEBGL && WEIXINMINIGAME +using System.Collections.Generic; +using WeChatWASM; +using YooAsset; +using UnityEngine; +using System.Linq; + +internal class WXFSClearAllBundleFilesOperation : FSClearAllBundleFilesOperation +{ + private enum ESteps + { + None, + GetAllCacheFiles, + ClearAllWXCacheBundleFiles, + Done, + } + + private List _wxBundleFilePaths; + private int _fileTotalCount = 0; + private WechatFileSystem _fileSystem; + private ESteps _steps = ESteps.None; + internal WXFSClearAllBundleFilesOperation(WechatFileSystem fileSystem) + { + _fileSystem = fileSystem; + var allCacheFilePathDic = _fileSystem.GetWXAllCacheFilePath(); + _wxBundleFilePaths = allCacheFilePathDic.Values.ToList(); + } + internal override void InternalOnStart() + { + _steps = ESteps.GetAllCacheFiles; + } + internal override void InternalOnUpdate() + { + if (_steps == ESteps.None || _steps == ESteps.Done) + return; + + if (_steps == ESteps.GetAllCacheFiles) + { + if (_wxBundleFilePaths == null) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + return; + } + else + { + _steps = ESteps.ClearAllWXCacheBundleFiles; + _fileTotalCount = _wxBundleFilePaths.Count; + } + } + + if (_steps == ESteps.ClearAllWXCacheBundleFiles) + { + for (int i = _wxBundleFilePaths.Count - 1; i >= 0; i--) + { + string bundlePath = _wxBundleFilePaths[i]; + if (_fileSystem.CheckWXFileIsExist(bundlePath)) + { + WX.RemoveFile(bundlePath, (bool isOk) => + { + Debug.Log($"{_wxBundleFilePaths.Count}---删除缓存文件路径成功====={bundlePath}=="); + _wxBundleFilePaths.Remove(bundlePath); + }); + } + else + { + _wxBundleFilePaths.Remove(bundlePath); + //Debug.LogWarning($"Not Exit Cache file:{bundlePath}"); + } + + if (OperationSystem.IsBusy) + break; + } + + if (_fileTotalCount == 0) + Progress = 1.0f; + else + Progress = 1.0f - (_wxBundleFilePaths.Count / _fileTotalCount); + + if (_wxBundleFilePaths.Count == 0) + { + _steps = ESteps.Done; + Status = EOperationStatus.Succeed; + } + } + } +} +#endif diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs index 3a34cbf4..ab6683bc 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs @@ -28,6 +28,8 @@ internal class WXFSClearUnusedBundleFilesAsync : FSClearUnusedBundleFilesOperati private string _packageHash; private int _unusedFileTotalCount = 0; private string _lastPackageVersion; + private string _cacheManifestHashPath; + private string _cacheManifestPath; internal WXFSClearUnusedBundleFilesAsync(WechatFileSystem fileSystem, PackageManifest manifest) { @@ -116,7 +118,7 @@ internal class WXFSClearUnusedBundleFilesAsync : FSClearUnusedBundleFilesOperati { if (bundle != null) { - var cachePath = GetUnuseCachePathByBundleName(bundle.FileName); + var cachePath = GetCachePathByFileName(bundle.FileName); WX.RemoveFile(cachePath, (bool isOk) => { Debug.Log($"{_unusedBundleGUIDs.Count}---删除缓存文件路径成功====={cachePath}=="); @@ -139,6 +141,7 @@ internal class WXFSClearUnusedBundleFilesAsync : FSClearUnusedBundleFilesOperati if (_unusedBundleGUIDs.Count == 0) { + CheckPackageVerion(); _steps = ESteps.Done; Status = EOperationStatus.Succeed; } @@ -162,16 +165,39 @@ internal class WXFSClearUnusedBundleFilesAsync : FSClearUnusedBundleFilesOperati private void LoadManifestInfo() { var packageName = _fileSystem.PackageName; - _lastPackageVersion = WX.StorageGetStringSync(YooAssets.DefaultPackageVersion_Key, YooAssets.DefaultPcakageVersion); - Debug.Log($"==========取出本地数据版本文件成功==={_lastPackageVersion}"); - if (!string.IsNullOrEmpty(_lastPackageVersion)) + var packageVersion = _manifest.PackageVersion; + if (WX.StorageHasKeySync(YooAssets.DefaultPackageVersion_Key)) { - var cacheManifestHashPath = GetUnuseCachePathByBundleName(YooAssetSettingsData.GetPackageHashFileName(packageName, _lastPackageVersion)); - var cacheManifestPath = GetUnuseCachePathByBundleName(YooAssetSettingsData.GetManifestBinaryFileName(packageName, _lastPackageVersion)); - if(string.IsNullOrEmpty(cacheManifestHashPath) || string.IsNullOrEmpty(cacheManifestPath)) { return; } + _lastPackageVersion = WX.StorageGetStringSync(YooAssets.DefaultPackageVersion_Key, YooAssets.DefaultPcakageVersion); + Debug.Log($"==========Get Storage PackageVerion Succ==={_lastPackageVersion}"); + if (!string.IsNullOrEmpty(_lastPackageVersion) && (_lastPackageVersion != packageVersion)) + { + _cacheManifestHashPath = GetCachePathByFileName(YooAssetSettingsData.GetPackageHashFileName(packageName, _lastPackageVersion)); + _cacheManifestPath = GetCachePathByFileName(YooAssetSettingsData.GetManifestBinaryFileName(packageName, _lastPackageVersion)); + if(string.IsNullOrEmpty(_cacheManifestHashPath) || string.IsNullOrEmpty(_cacheManifestPath)) { return; } - _packageHash = _fileSystem.ReadFileText(cacheManifestHashPath); - _fileData = _fileSystem.ReadFileData(cacheManifestPath); + _packageHash = _fileSystem.ReadFileText(_cacheManifestHashPath); + _fileData = _fileSystem.ReadFileData(_cacheManifestPath); + } + } + else + { + WX.StorageSetStringSync(YooAssets.DefaultPackageVersion_Key, packageVersion); + Debug.Log($"first Set Storage PackageVerion Succ==={packageVersion}"); + } + } + + private void CheckPackageVerion() + { + var packageName = _fileSystem.PackageName; + var packageVersion = _manifest.PackageVersion; + if (_lastPackageVersion != packageVersion) + { + WX.StorageSetStringSync(YooAssets.DefaultPackageVersion_Key, packageVersion); + //删除旧的资源清单文件和哈希文件 + WX.RemoveFile(_cacheManifestHashPath, (bool isOk) => { Debug.Log("====Delect manifestHashPath Succ"); }); + WX.RemoveFile(_cacheManifestPath, (bool isOk) => { Debug.Log("====Delect manifestPath Succ"); }); + Debug.Log($"==========Set Storage PackageVerion Succ==={packageVersion}"); } } diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs index 13d8d74f..b2698181 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs @@ -3,21 +3,17 @@ using System.Collections.Generic; using UnityEngine; using YooAsset; using WeChatWASM; +using System; public static class WechatFileSystemCreater { - public static FileSystemParameters CreateWechatFileSystemParameters(IRemoteServices remoteServices,string rootDirectory = null) + public static FileSystemParameters CreateWechatFileSystemParameters(IRemoteServices remoteServices) { string fileSystemClass = $"{nameof(WechatFileSystem)},YooAsset.RuntimeExtension"; - var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); + var fileSystemParams = new FileSystemParameters(fileSystemClass, null); fileSystemParams.AddParameter("REMOTE_SERVICES", remoteServices); return fileSystemParams; } - - /// - /// AppVersion - /// - public static string AppVersion { get; set; } } /// @@ -56,9 +52,12 @@ internal class WechatFileSystem : IFileSystem } } - private readonly Dictionary _cacheFilePaths = new Dictionary(10000); - private WXFileSystemManager _fileSystemManager; - private string _fileCacheRoot = string.Empty; + /// + /// Key:资源包GUID Value:缓存路径 + /// + private readonly Dictionary _wxFilePaths = new Dictionary(10000); + private WXFileSystemManager _wxFileSystemMgr; + private string _wxFileCacheRoot = string.Empty; /// /// 包裹名称 @@ -72,7 +71,7 @@ internal class WechatFileSystem : IFileSystem { get { - return _fileCacheRoot; + return _wxFileCacheRoot; } } @@ -87,12 +86,12 @@ internal class WechatFileSystem : IFileSystem } } -#region 自定义参数 + #region 自定义参数 /// /// 自定义参数:远程服务接口 /// public IRemoteServices RemoteServices { private set; get; } = null; -#endregion + #endregion public WechatFileSystem() @@ -122,6 +121,7 @@ internal class WechatFileSystem : IFileSystem OperationSystem.StartOperation(PackageName, operation); return operation; } + public virtual FSClearUnusedBundleFilesOperation ClearUnusedBundleFilesAsync(PackageManifest manifest) { var operation = new WXFSClearUnusedBundleFilesAsync(this, manifest); @@ -171,8 +171,9 @@ internal class WechatFileSystem : IFileSystem RemoteServices = new WebRemoteServices(webRoot); } - _fileSystemManager = WX.GetFileSystemManager(); - _fileCacheRoot = rootDirectory;// WX.PluginCachePath; //WX.env.USER_DATA_PATH; //注意:如果有子目录,请修改此处! + _wxFileSystemMgr = WX.GetFileSystemManager(); + _wxFileCacheRoot = PathUtility.Combine(WX.PluginCachePath, $"StreamingAssets/WebGL");// WX.PluginCachePath; //注意:如果有子目录,请修改此处! + Debug.Log($"==_wxFileCacheRoot=={_wxFileCacheRoot}"); } public virtual void OnUpdate() { @@ -193,6 +194,7 @@ internal class WechatFileSystem : IFileSystem if (Belong(bundle) == false) return false; + //Debug.Log($"WX NeedDownload: bundleName:{bundle.BundleName} + Exists:{Exists(bundle)}"); return Exists(bundle) == false; } public virtual bool NeedUnpack(PackageBundle bundle) @@ -212,6 +214,7 @@ internal class WechatFileSystem : IFileSystem { throw new System.NotImplementedException(); } + public byte[] ReadFileData(string filePath) { if (CheckWXFileIsExist(filePath)) @@ -229,6 +232,7 @@ internal class WechatFileSystem : IFileSystem return string.Empty; //throw new System.NotImplementedException(); } + /// /// 获取所有缓存文件的路径 /// @@ -247,68 +251,16 @@ internal class WechatFileSystem : IFileSystem string result = _wxFileSystemMgr.AccessSync(filePath); return result.Equals("access:ok"); } -#region 调用微信小游戏接口删除缓存文件目录下所有文件 - public void ClearAllCacheFile() + #region 内部方法 + private string GetWXFileLoadPath(PackageBundle bundle) { -#if !UNITY_EDITOR && UNITY_WEBGL && WEIXINMINIGAME - ShowModalOption showModalOp = new ShowModalOption(); - showModalOp.title = "提示"; - showModalOp.content = "是否确定要清理缓存并重启"; - showModalOp.confirmText = "确定"; - showModalOp.cancelText = "取消"; - showModalOp.complete = (GeneralCallbackResult callResult) => { Debug.Log($"complete==={callResult.errMsg}"); }; - showModalOp.fail = (GeneralCallbackResult callResult) => { Debug.Log($"fail==={callResult.errMsg}"); }; - showModalOp.success = (ShowModalSuccessCallbackResult callResult) => - { - if(callResult.confirm) - RestartMiniGame(); - }; - WX.ShowModal(showModalOp); -#endif - } - - /// - /// 微信小游戏清除缓存并且重启小游戏 - /// 参考小游戏=>出发吧麦芬 - /// - private void RestartMiniGame() - { - WX.CleanAllFileCache((bool isOk) => + if (_wxFilePaths.TryGetValue(bundle.BundleGUID, out string filePath) == false) { - RestartMiniProgramOption restartMini = new RestartMiniProgramOption(); - restartMini.complete = RestartMiniComplete; - restartMini.fail = RestartMiniFailComplete; - restartMini.success = RestartMiniSuccComplete; - WX.RestartMiniProgram(restartMini); - }); - } - - private void RestartMiniComplete(GeneralCallbackResult result) - { - Debug.Log($"RestartMiniComplete:{result.errMsg}"); - } - - private void RestartMiniFailComplete(GeneralCallbackResult result) - { - Debug.Log($"RestartMiniFailComplete:{result.errMsg}"); - } - - private void RestartMiniSuccComplete(GeneralCallbackResult result) - { - Debug.Log($"RestartMiniSuccComplete:{result.errMsg}"); - } - -#endregion -#region 内部方法 - private string GetCacheFileLoadPath(PackageBundle bundle) - { - if (_cacheFilePaths.TryGetValue(bundle.BundleGUID, out string filePath) == false) - { - filePath = PathUtility.Combine(_fileCacheRoot, bundle.FileName); - _cacheFilePaths.Add(bundle.BundleGUID, filePath); + filePath = PathUtility.Combine(_wxFileCacheRoot, bundle.FileName); + _wxFilePaths.Add(bundle.BundleGUID, filePath); } return filePath; } -#endregion + #endregion } #endif \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs index f14b35dc..b64b29bb 100644 --- a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs +++ b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmClearPackageCache.cs @@ -32,20 +32,6 @@ internal class FsmClearPackageCache : IStateNode private void Operation_Completed(YooAsset.AsyncOperationBase obj) { -#if UNITY_WEBGL && WEIXINMINIGAME - - //删除旧的资源清单文件和哈希文件 - if (WX.StorageHasKeySync(YooAssets.DefaultPackageVersion_Key)) - { - var packageName = (string)_machine.GetBlackboardValue("PackageName"); - var packageVersion = (string)_machine.GetBlackboardValue("PackageVersion"); - var lastPackageVersion = WX.StorageGetStringSync(YooAssets.DefaultPackageVersion_Key, ""); - if (lastPackageVersion != packageVersion) - { - WX.StorageSetStringSync(YooAssets.DefaultPackageVersion_Key, packageVersion); - } - } -#endif _machine.ChangeState(); } } \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs index cb88dee4..a158b0cb 100644 --- a/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs +++ b/Assets/YooAsset/Samples~/Space Shooter/GameScript/Runtime/PatchLogic/FsmNode/FsmInitializePackage.cs @@ -75,11 +75,10 @@ internal class FsmInitializePackage : IStateNode { var createParameters = new WebPlayModeParameters(); #if UNITY_WEBGL && WEIXINMINIGAME && !UNITY_EDITOR - string defaultHostServer = GetHostServerURL(); - string fallbackHostServer = GetHostServerURL(); - IRemoteServices remoteServices = new RemoteServices(defaultHostServer, fallbackHostServer); - var rootDir = string.Format("{0}/{1}", WX.PluginCachePath, $"StreamingAssets/WebGL/v1.0.0");//这个1.0.0是App大版本文件,转微信小游戏后,没删除 - createParameters.WebFileSystemParameters = WechatFileSystemCreater.CreateWechatFileSystemParameters(remoteServices, rootDir); + string defaultHostServer = GetHostServerURL(); + string fallbackHostServer = GetHostServerURL(); + IRemoteServices remoteServices = new RemoteServices(defaultHostServer, fallbackHostServer); + createParameters.WebFileSystemParameters = WechatFileSystemCreater.CreateWechatFileSystemParameters(remoteServices); #else createParameters.WebFileSystemParameters = FileSystemParameters.CreateDefaultWebFileSystemParameters(); #endif From e9539636acc23c76380d3c4d7f0691c37fa4125a Mon Sep 17 00:00:00 2001 From: jcakCheng Date: Fri, 13 Sep 2024 21:05:15 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E8=AF=AF=E5=88=A0=E9=99=A4=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E5=BE=AE=E4=BF=A1=E5=B0=8F=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=88=A0=E9=99=A4=E7=BC=93=E5=AD=98=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=9B=AE=E5=BD=95=E4=B8=8B=E6=89=80=E6=9C=89=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WechatFileSystem/WechatFileSystem.cs | 60 +++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs index b2698181..7caa639e 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/WechatFileSystem/WechatFileSystem.cs @@ -86,12 +86,12 @@ internal class WechatFileSystem : IFileSystem } } - #region 自定义参数 +#region 自定义参数 /// /// 自定义参数:远程服务接口 /// public IRemoteServices RemoteServices { private set; get; } = null; - #endregion +#endregion public WechatFileSystem() @@ -251,7 +251,59 @@ internal class WechatFileSystem : IFileSystem string result = _wxFileSystemMgr.AccessSync(filePath); return result.Equals("access:ok"); } - #region 内部方法 +#region 调用微信小游戏接口删除缓存文件目录下所有文件 + public void ClearAllCacheFile() + { +#if !UNITY_EDITOR && UNITY_WEBGL && WEIXINMINIGAME + ShowModalOption showModalOp = new ShowModalOption(); + showModalOp.title = "提示"; + showModalOp.content = "是否确定要清理缓存并重启"; + showModalOp.confirmText = "确定"; + showModalOp.cancelText = "取消"; + showModalOp.complete = (GeneralCallbackResult callResult) => { Debug.Log($"complete==={callResult.errMsg}"); }; + showModalOp.fail = (GeneralCallbackResult callResult) => { Debug.Log($"fail==={callResult.errMsg}"); }; + showModalOp.success = (ShowModalSuccessCallbackResult callResult) => + { + if(callResult.confirm) + RestartMiniGame(); + }; + WX.ShowModal(showModalOp); +#endif + } + + /// + /// 微信小游戏清除缓存并且重启小游戏 + /// 参考小游戏=>出发吧麦芬 + /// + private void RestartMiniGame() + { + WX.CleanAllFileCache((bool isOk) => + { + RestartMiniProgramOption restartMini = new RestartMiniProgramOption(); + restartMini.complete = RestartMiniComplete; + restartMini.fail = RestartMiniFailComplete; + restartMini.success = RestartMiniSuccComplete; + WX.RestartMiniProgram(restartMini); + }); + } + + private void RestartMiniComplete(GeneralCallbackResult result) + { + Debug.Log($"RestartMiniComplete:{result.errMsg}"); + } + + private void RestartMiniFailComplete(GeneralCallbackResult result) + { + Debug.Log($"RestartMiniFailComplete:{result.errMsg}"); + } + + private void RestartMiniSuccComplete(GeneralCallbackResult result) + { + Debug.Log($"RestartMiniSuccComplete:{result.errMsg}"); + } + +#endregion +#region 内部方法 private string GetWXFileLoadPath(PackageBundle bundle) { if (_wxFilePaths.TryGetValue(bundle.BundleGUID, out string filePath) == false) @@ -261,6 +313,6 @@ internal class WechatFileSystem : IFileSystem } return filePath; } - #endregion +#endregion } #endif \ No newline at end of file