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 PackageRoot { private set; get; } public FileSystemParameters(string fileSystemClass, string packageRoot) { FileSystemClass = fileSystemClass; PackageRoot = packageRoot; } /// /// 添加自定义参数 /// 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, PackageRoot); return instance; } #region 创建默认的文件系统类 /// /// 创建默认的编辑器文件系统参数 /// 文件系统的根目录 /// public static FileSystemParameters CreateDefaultEditorFileSystemParameters(string packageRoot) { string fileSystemClass = typeof(DefaultEditorFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot); return fileSystemParams; } /// /// 创建默认的内置文件系统参数 /// /// 加密文件解密服务类 /// 文件系统的根目录 public static FileSystemParameters CreateDefaultBuildinFileSystemParameters(IDecryptionServices decryptionServices = null, string packageRoot = null) { string fileSystemClass = typeof(DefaultBuildinFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot); fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices); return fileSystemParams; } /// /// 创建默认的缓存文件系统参数 /// /// 远端资源地址查询服务类 /// 加密文件解密服务类 /// 文件系统的根目录 public static FileSystemParameters CreateDefaultCacheFileSystemParameters(IRemoteServices remoteServices, IDecryptionServices decryptionServices = null, string packageRoot = null) { string fileSystemClass = typeof(DefaultCacheFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot); fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices); fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices); return fileSystemParams; } /// /// 创建默认的WebServer文件系统参数 /// /// 加密文件解密服务类 /// 禁用Unity的网络缓存 public static FileSystemParameters CreateDefaultWebServerFileSystemParameters(IWebDecryptionServices decryptionServices = null, bool disableUnityWebCache = false) { string fileSystemClass = typeof(DefaultWebServerFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, null); fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices); fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache); return fileSystemParams; } /// /// 创建默认的WebRemote文件系统参数 /// /// 远端资源地址查询服务类 /// 加密文件解密服务类 /// 禁用Unity的网络缓存 public static FileSystemParameters CreateDefaultWebRemoteFileSystemParameters(IRemoteServices remoteServices, IWebDecryptionServices decryptionServices = null, bool disableUnityWebCache = false) { string fileSystemClass = typeof(DefaultWebRemoteFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, null); fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices); fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices); fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache); return fileSystemParams; } #endregion } }