From 24142de11fe3b7b1c23a9be7d842f2b63f48ce3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Wed, 12 Feb 2025 11:23:27 +0800 Subject: [PATCH] update extension sample MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持微信小游戏文件加密 --- .../TiktokFileSystem/TiktokFileSystem.cs | 2 +- .../WXFSClearUnusedBundleFilesAsync.cs | 3 +- .../Operation/WXFSLoadBundleOperation.cs | 8 ++++- .../WechatFileSystem/WechatFileSystem.cs | 35 ++++++++++++++++--- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/TiktokFileSystem/TiktokFileSystem.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/TiktokFileSystem/TiktokFileSystem.cs index 29a68f57..7f1954ab 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/TiktokFileSystem/TiktokFileSystem.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/TiktokFileSystem/TiktokFileSystem.cs @@ -146,7 +146,7 @@ internal class TiktokFileSystem : IFileSystem public virtual void SetParameter(string name, object value) { - if (name == "REMOTE_SERVICES") + if (name == FileSystemParametersDefine.REMOTE_SERVICES) { RemoteServices = (IRemoteServices)value; } diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs index 0109a255..70869862 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/Operation/WXFSClearUnusedBundleFilesAsync.cs @@ -54,7 +54,8 @@ internal class WXFSClearUnusedBundleFilesAsync : FSClearCacheFilesOperation if (_manifest.TryGetPackageBundleByBundleGUID(bundleGUID, out PackageBundle value) == false) { string fullPath = WX.GetCachePath(fileStat.path); - if (!_unusedCacheFiles.Contains(fullPath)) _unusedCacheFiles.Add(fullPath); + if (_unusedCacheFiles.Contains(fullPath) == false) + _unusedCacheFiles.Add(fullPath); } } diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/Operation/WXFSLoadBundleOperation.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/Operation/WXFSLoadBundleOperation.cs index 1fab8212..05aa1b99 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/Operation/WXFSLoadBundleOperation.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/Operation/WXFSLoadBundleOperation.cs @@ -49,7 +49,13 @@ internal class WXFSLoadBundleOperation : FSLoadBundleOperation if (CheckRequestResult()) { - var assetBundle = (_webRequest.downloadHandler as DownloadHandlerWXAssetBundle).assetBundle; + AssetBundle assetBundle; + var downloadHanlder = _webRequest.downloadHandler as DownloadHandlerWXAssetBundle; + if (_bundle.Encrypted) + assetBundle = _fileSystem.LoadEncryptedAssetBundle(downloadHanlder.data); + else + assetBundle = downloadHanlder.assetBundle; + if (assetBundle == null) { _steps = ESteps.Done; diff --git a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/WechatFileSystem.cs b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/WechatFileSystem.cs index ab3cbe59..645c7ef9 100644 --- a/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/WechatFileSystem.cs +++ b/Assets/YooAsset/Samples~/Extension Sample/Runtime/ExtensionFileSystem/WechatFileSystem/WechatFileSystem.cs @@ -8,11 +8,19 @@ using WeChatWASM; public static class WechatFileSystemCreater { - public static FileSystemParameters CreateWechatFileSystemParameters(IRemoteServices remoteServices, string packageRoot) + public static FileSystemParameters CreateWechatFileSystemParameters(string packageRoot, IRemoteServices remoteServices) { string fileSystemClass = $"{nameof(WechatFileSystem)},YooAsset.RuntimeExtension"; var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot); - fileSystemParams.AddParameter("REMOTE_SERVICES", remoteServices); + fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices); + return fileSystemParams; + } + public static FileSystemParameters CreateWechatFileSystemParameters(string packageRoot, IRemoteServices remoteServices, IWebDecryptionServices decryptionServices) + { + string fileSystemClass = $"{nameof(WechatFileSystem)},YooAsset.RuntimeExtension"; + var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot); + fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices); + fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices); return fileSystemParams; } } @@ -61,7 +69,7 @@ internal class WechatFileSystem : IFileSystem /// 包裹名称 /// public string PackageName { private set; get; } - + private readonly string _packageRoot = YooAssetSettingsData.Setting.DefaultYooFolderName; /// @@ -91,6 +99,11 @@ internal class WechatFileSystem : IFileSystem /// 自定义参数:远程服务接口 /// public IRemoteServices RemoteServices { private set; get; } = null; + + /// + /// 自定义参数:解密方法类 + /// + public IWebDecryptionServices DecryptionServices { private set; get; } #endregion @@ -164,10 +177,14 @@ internal class WechatFileSystem : IFileSystem public virtual void SetParameter(string name, object value) { - if (name == "REMOTE_SERVICES") + if (name == FileSystemParametersDefine.REMOTE_SERVICES) { RemoteServices = (IRemoteServices)value; } + else if (name == FileSystemParametersDefine.DECRYPTION_SERVICES) + { + DecryptionServices = (IWebDecryptionServices)value; + } else { YooLogger.Warning($"Invalid parameter : {name}"); @@ -183,7 +200,7 @@ internal class WechatFileSystem : IFileSystem throw new System.Exception("请配置微信小游戏缓存根目录!"); } - if (!_wxCacheRoot.StartsWith(WX.PluginCachePath)) + if (_wxCacheRoot.StartsWith(WX.PluginCachePath) == false) { _wxCacheRoot = PathUtility.Combine(WX.PluginCachePath, _wxCacheRoot); } @@ -269,6 +286,14 @@ internal class WechatFileSystem : IFileSystem } return filePath; } + + /// + /// 加载加密资源文件 + /// + public AssetBundle LoadEncryptedAssetBundle(byte[] fileData) + { + return DecryptionServices.LoadAssetBundle(fileData); + } #endregion } #endif \ No newline at end of file