diff --git a/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs b/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs new file mode 100644 index 00000000..8df664be --- /dev/null +++ b/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; + +namespace YooAsset +{ + /// + /// 文件系统参数 + /// + public class FileSystemParameters + { + internal readonly Dictionary CreateParameters = new Dictionary(100); + + /// + /// 文件系统类 + /// 格式: "namespace.class,assembly" + /// 格式: "命名空间.类型名,程序集" + /// + public string FileSystemClass { private set; get; } + + /// + /// 文件系统的根目录 + /// + public string RootDirectory { private set; get; } + + + public FileSystemParameters(string fileSystemClass, string rootDirectory) + { + FileSystemClass = fileSystemClass; + RootDirectory = rootDirectory; + } + + /// + /// 添加自定义参数 + /// + public void AddParameter(string name, object value) + { + CreateParameters.Add(name, value); + } + + /// + /// 创建文件系统 + /// + internal IFileSystem CreateFileSystem(string packageName) + { + YooLogger.Log($"The package {packageName} create file system : {FileSystemClass}"); + + Type classType = Type.GetType(FileSystemClass); + if (classType == null) + { + YooLogger.Error($"Can not found file system class type {FileSystemClass}"); + return null; + } + + var instance = (IFileSystem)System.Activator.CreateInstance(classType, true); + if (instance == null) + { + YooLogger.Error($"Failed to create file system instance {FileSystemClass}"); + return null; + } + + foreach (var param in CreateParameters) + { + instance.SetParameter(param.Key, param.Value); + } + instance.OnCreate(packageName, RootDirectory); + return instance; + } + + #region 创建默认的文件系统类 + /// + /// 创建默认的编辑器文件系统参数 + /// 模拟构建结果 + /// + public static FileSystemParameters CreateDefaultEditorFileSystemParameters(EditorSimulateBuildResult simulateBuildResult) + { + string fileSystemClass = typeof(DefaultEditorFileSystem).FullName; + var fileSystemParams = new FileSystemParameters(fileSystemClass, simulateBuildResult.PackageRootDirectory); + return fileSystemParams; + } + + /// + /// 创建默认的内置文件系统参数 + /// + /// 加密文件解密服务类 + /// 缓存文件的校验等级 + /// 内置文件的根路径 + public static FileSystemParameters CreateDefaultBuildinFileSystemParameters(IDecryptionServices decryptionServices = null, EFileVerifyLevel verifyLevel = EFileVerifyLevel.Middle, string rootDirectory = null) + { + string fileSystemClass = typeof(DefaultBuildinFileSystem).FullName; + var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); + fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices); + fileSystemParams.AddParameter(FileSystemParametersDefine.FILE_VERIFY_LEVEL, verifyLevel); + return fileSystemParams; + } + + /// + /// 创建默认的缓存文件系统参数 + /// + /// 远端资源地址查询服务类 + /// 加密文件解密服务类 + /// 缓存文件的校验等级 + /// 文件系统的根目录 + public static FileSystemParameters CreateDefaultCacheFileSystemParameters(IRemoteServices remoteServices, IDecryptionServices decryptionServices = null, EFileVerifyLevel verifyLevel = EFileVerifyLevel.Middle, string rootDirectory = null) + { + string fileSystemClass = typeof(DefaultCacheFileSystem).FullName; + var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); + fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices); + fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices); + fileSystemParams.AddParameter(FileSystemParametersDefine.FILE_VERIFY_LEVEL, verifyLevel); + return fileSystemParams; + } + + /// + /// 创建默认的WebServer文件系统参数 + /// + /// 禁用Unity的网络缓存 + public static FileSystemParameters CreateDefaultWebServerFileSystemParameters(bool disableUnityWebCache = false) + { + string fileSystemClass = typeof(DefaultWebServerFileSystem).FullName; + var fileSystemParams = new FileSystemParameters(fileSystemClass, null); + fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache); + return fileSystemParams; + } + + /// + /// 创建默认的WebRemote文件系统参数 + /// + /// 远端资源地址查询服务类 + /// 禁用Unity的网络缓存 + public static FileSystemParameters CreateDefaultWebRemoteFileSystemParameters(IRemoteServices remoteServices, bool disableUnityWebCache = false) + { + string fileSystemClass = typeof(DefaultWebServerFileSystem).FullName; + var fileSystemParams = new FileSystemParameters(fileSystemClass, null); + fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices); + fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache); + return fileSystemParams; + } + #endregion + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs.meta b/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs.meta new file mode 100644 index 00000000..7db0d2c2 --- /dev/null +++ b/Assets/YooAsset/Runtime/FileSystem/FileSystemParameters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ce5a2677e1696d488c3b883fa915ae0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/InitializeParameters.cs b/Assets/YooAsset/Runtime/InitializeParameters.cs index c56579f1..152e2523 100644 --- a/Assets/YooAsset/Runtime/InitializeParameters.cs +++ b/Assets/YooAsset/Runtime/InitializeParameters.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; - + namespace YooAsset { /// @@ -29,111 +27,6 @@ namespace YooAsset WebPlayMode, } - /// - /// 文件系统参数 - /// - public class FileSystemParameters - { - internal Dictionary CreateParameters = new Dictionary(); - - /// - /// 文件系统类 - /// 格式: "namespace.class,assembly" - /// 格式: "命名空间.类型名,程序集" - /// - public string FileSystemClass { private set; get; } - - /// - /// 文件系统的根目录 - /// - public string RootDirectory { private set; get; } - - - public FileSystemParameters(string fileSystemClass, string rootDirectory) - { - FileSystemClass = fileSystemClass; - RootDirectory = rootDirectory; - } - - /// - /// 添加自定义参数 - /// - public void AddParameter(string name, object value) - { - CreateParameters.Add(name, value); - } - - - /// - /// 创建默认的编辑器文件系统参数 - /// 模拟构建结果 - /// - public static FileSystemParameters CreateDefaultEditorFileSystemParameters(EditorSimulateBuildResult simulateBuildResult) - { - string fileSystemClass = typeof(DefaultEditorFileSystem).FullName; - var fileSystemParams = new FileSystemParameters(fileSystemClass, simulateBuildResult.PackageRootDirectory); - return fileSystemParams; - } - - /// - /// 创建默认的内置文件系统参数 - /// - /// 加密文件解密服务类 - /// 缓存文件的校验等级 - /// 内置文件的根路径 - public static FileSystemParameters CreateDefaultBuildinFileSystemParameters(IDecryptionServices decryptionServices = null, EFileVerifyLevel verifyLevel = EFileVerifyLevel.Middle, string rootDirectory = null) - { - string fileSystemClass = typeof(DefaultBuildinFileSystem).FullName; - var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); - fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices); - fileSystemParams.AddParameter(FileSystemParametersDefine.FILE_VERIFY_LEVEL, verifyLevel); - return fileSystemParams; - } - - /// - /// 创建默认的缓存文件系统参数 - /// - /// 远端资源地址查询服务类 - /// 加密文件解密服务类 - /// 缓存文件的校验等级 - /// 文件系统的根目录 - public static FileSystemParameters CreateDefaultCacheFileSystemParameters(IRemoteServices remoteServices, IDecryptionServices decryptionServices = null, EFileVerifyLevel verifyLevel = EFileVerifyLevel.Middle, string rootDirectory = null) - { - string fileSystemClass = typeof(DefaultCacheFileSystem).FullName; - var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); - fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices); - fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices); - fileSystemParams.AddParameter(FileSystemParametersDefine.FILE_VERIFY_LEVEL, verifyLevel); - return fileSystemParams; - } - - /// - /// 创建默认的WebServer文件系统参数 - /// - /// 禁用Unity的网络缓存 - public static FileSystemParameters CreateDefaultWebServerFileSystemParameters(bool disableUnityWebCache = false) - { - string fileSystemClass = typeof(DefaultWebServerFileSystem).FullName; - var fileSystemParams = new FileSystemParameters(fileSystemClass, null); - fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache); - return fileSystemParams; - } - - /// - /// 创建默认的WebRemote文件系统参数 - /// - /// 远端资源地址查询服务类 - /// 禁用Unity的网络缓存 - public static FileSystemParameters CreateDefaultWebRemoteFileSystemParameters(IRemoteServices remoteServices, bool disableUnityWebCache = false) - { - string fileSystemClass = typeof(DefaultWebServerFileSystem).FullName; - var fileSystemParams = new FileSystemParameters(fileSystemClass, null); - fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices); - fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache); - return fileSystemParams; - } - } - /// /// 初始化参数 /// diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializationOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializationOperation.cs index a721bcb0..640de2ab 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializationOperation.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializationOperation.cs @@ -47,7 +47,7 @@ namespace YooAsset return; } - _impl.EditorFileSystem = PlayModeHelper.CreateFileSystem(_impl.PackageName, _parameters.EditorFileSystemParameters); + _impl.EditorFileSystem = _parameters.EditorFileSystemParameters.CreateFileSystem(_impl.PackageName); if (_impl.EditorFileSystem == null) { _steps = ESteps.Done; @@ -127,7 +127,7 @@ namespace YooAsset return; } - _impl.BuildinFileSystem = PlayModeHelper.CreateFileSystem(_impl.PackageName, _parameters.BuildinFileSystemParameters); + _impl.BuildinFileSystem = _parameters.BuildinFileSystemParameters.CreateFileSystem(_impl.PackageName); if (_impl.BuildinFileSystem == null) { _steps = ESteps.Done; @@ -206,7 +206,7 @@ namespace YooAsset return; } - _impl.BuildinFileSystem = PlayModeHelper.CreateFileSystem(_impl.PackageName, _parameters.BuildinFileSystemParameters); + _impl.BuildinFileSystem = _parameters.BuildinFileSystemParameters.CreateFileSystem(_impl.PackageName); if (_impl.BuildinFileSystem == null) { _steps = ESteps.Done; @@ -249,7 +249,7 @@ namespace YooAsset return; } - _impl.CacheFileSystem = PlayModeHelper.CreateFileSystem(_impl.PackageName, _parameters.CacheFileSystemParameters); + _impl.CacheFileSystem = _parameters.CacheFileSystemParameters.CreateFileSystem(_impl.PackageName); if (_impl.CacheFileSystem == null) { _steps = ESteps.Done; @@ -329,7 +329,7 @@ namespace YooAsset return; } - _impl.WebServerFileSystem = PlayModeHelper.CreateFileSystem(_impl.PackageName, _parameters.WebServerFileSystemParameters); + _impl.WebServerFileSystem = _parameters.WebServerFileSystemParameters.CreateFileSystem(_impl.PackageName); if (_impl.WebServerFileSystem == null) { _steps = ESteps.Done; @@ -370,7 +370,7 @@ namespace YooAsset return; } - _impl.WebRemoteFileSystem = PlayModeHelper.CreateFileSystem(_impl.PackageName, _parameters.WebRemoteFileSystemParameters); + _impl.WebRemoteFileSystem = _parameters.WebRemoteFileSystemParameters.CreateFileSystem(_impl.PackageName); if (_impl.WebRemoteFileSystem == null) { _steps = ESteps.Done; diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeHelper.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeHelper.cs index 609d1985..e1691257 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeHelper.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeHelper.cs @@ -5,32 +5,6 @@ namespace YooAsset { internal class PlayModeHelper { - public static IFileSystem CreateFileSystem(string packageName, FileSystemParameters parameters) - { - YooLogger.Log($"The package {packageName} create file system : {parameters.FileSystemClass}"); - - Type classType = Type.GetType(parameters.FileSystemClass); - if (classType == null) - { - YooLogger.Error($"Can not found file system class type {parameters.FileSystemClass}"); - return null; - } - - var instance = (IFileSystem)System.Activator.CreateInstance(classType, true); - if (instance == null) - { - YooLogger.Error($"Failed to create file system instance {parameters.FileSystemClass}"); - return null; - } - - foreach (var param in parameters.CreateParameters) - { - instance.SetParameter(param.Key, param.Value); - } - instance.OnCreate(packageName, parameters.RootDirectory); - return instance; - } - public static List GetDownloadListByAll(PackageManifest manifest, IFileSystem fileSystemA = null, IFileSystem fileSystemB = null, IFileSystem fileSystemC = null) { List result = new List(1000); diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs index 156e6d0a..4e8768a2 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs @@ -257,6 +257,7 @@ namespace YooAsset return _playModeImpl.ClearCacheBundleFilesAsync(clearMode, clearParam); } + #region 包裹信息 /// /// 获取当前激活包裹的版本信息 /// @@ -283,6 +284,7 @@ namespace YooAsset DebugCheckInitialize(); return _playModeImpl.ActiveManifest.GetPackageDetails(); } + #endregion #region 资源回收 ///