FileSystemParameters.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using System;
  2. using System.Collections.Generic;
  3. namespace YooAsset
  4. {
  5. /// <summary>
  6. /// 文件系统参数
  7. /// </summary>
  8. public class FileSystemParameters
  9. {
  10. internal readonly Dictionary<string, object> CreateParameters = new Dictionary<string, object>(100);
  11. /// <summary>
  12. /// 文件系统类
  13. /// 格式: "namespace.class,assembly"
  14. /// 格式: "命名空间.类型名,程序集"
  15. /// </summary>
  16. public string FileSystemClass { private set; get; }
  17. /// <summary>
  18. /// 文件系统的根目录
  19. /// </summary>
  20. public string PackageRoot { private set; get; }
  21. public FileSystemParameters(string fileSystemClass, string packageRoot)
  22. {
  23. FileSystemClass = fileSystemClass;
  24. PackageRoot = packageRoot;
  25. }
  26. /// <summary>
  27. /// 添加自定义参数
  28. /// </summary>
  29. public void AddParameter(string name, object value)
  30. {
  31. CreateParameters.Add(name, value);
  32. }
  33. /// <summary>
  34. /// 创建文件系统
  35. /// </summary>
  36. internal IFileSystem CreateFileSystem(string packageName)
  37. {
  38. YooLogger.Log($"The package {packageName} create file system : {FileSystemClass}");
  39. Type classType = Type.GetType(FileSystemClass);
  40. if (classType == null)
  41. {
  42. YooLogger.Error($"Can not found file system class type {FileSystemClass}");
  43. return null;
  44. }
  45. var instance = (IFileSystem)System.Activator.CreateInstance(classType, true);
  46. if (instance == null)
  47. {
  48. YooLogger.Error($"Failed to create file system instance {FileSystemClass}");
  49. return null;
  50. }
  51. foreach (var param in CreateParameters)
  52. {
  53. instance.SetParameter(param.Key, param.Value);
  54. }
  55. instance.OnCreate(packageName, PackageRoot);
  56. return instance;
  57. }
  58. #region 创建默认的文件系统类
  59. /// <summary>
  60. /// 创建默认的编辑器文件系统参数
  61. /// <param name="packageRoot">文件系统的根目录</param>
  62. /// </summary>
  63. public static FileSystemParameters CreateDefaultEditorFileSystemParameters(string packageRoot)
  64. {
  65. string fileSystemClass = typeof(DefaultEditorFileSystem).FullName;
  66. var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
  67. return fileSystemParams;
  68. }
  69. /// <summary>
  70. /// 创建默认的内置文件系统参数
  71. /// </summary>
  72. /// <param name="decryptionServices">加密文件解密服务类</param>
  73. /// <param name="packageRoot">文件系统的根目录</param>
  74. public static FileSystemParameters CreateDefaultBuildinFileSystemParameters(IDecryptionServices decryptionServices = null, string packageRoot = null)
  75. {
  76. string fileSystemClass = typeof(DefaultBuildinFileSystem).FullName;
  77. var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
  78. fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices);
  79. return fileSystemParams;
  80. }
  81. /// <summary>
  82. /// 创建默认的缓存文件系统参数
  83. /// </summary>
  84. /// <param name="remoteServices">远端资源地址查询服务类</param>
  85. /// <param name="decryptionServices">加密文件解密服务类</param>
  86. /// <param name="packageRoot">文件系统的根目录</param>
  87. public static FileSystemParameters CreateDefaultCacheFileSystemParameters(IRemoteServices remoteServices, IDecryptionServices decryptionServices = null, string packageRoot = null)
  88. {
  89. string fileSystemClass = typeof(DefaultCacheFileSystem).FullName;
  90. var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
  91. fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices);
  92. fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices);
  93. return fileSystemParams;
  94. }
  95. /// <summary>
  96. /// 创建默认的WebServer文件系统参数
  97. /// </summary>
  98. /// <param name="decryptionServices">加密文件解密服务类</param>
  99. /// <param name="disableUnityWebCache">禁用Unity的网络缓存</param>
  100. public static FileSystemParameters CreateDefaultWebServerFileSystemParameters(IWebDecryptionServices decryptionServices = null, bool disableUnityWebCache = false)
  101. {
  102. string fileSystemClass = typeof(DefaultWebServerFileSystem).FullName;
  103. var fileSystemParams = new FileSystemParameters(fileSystemClass, null);
  104. fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices);
  105. fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache);
  106. return fileSystemParams;
  107. }
  108. /// <summary>
  109. /// 创建默认的WebRemote文件系统参数
  110. /// </summary>
  111. /// <param name="remoteServices">远端资源地址查询服务类</param>
  112. /// <param name="decryptionServices">加密文件解密服务类</param>
  113. /// <param name="disableUnityWebCache">禁用Unity的网络缓存</param>
  114. public static FileSystemParameters CreateDefaultWebRemoteFileSystemParameters(IRemoteServices remoteServices, IWebDecryptionServices decryptionServices = null, bool disableUnityWebCache = false)
  115. {
  116. string fileSystemClass = typeof(DefaultWebRemoteFileSystem).FullName;
  117. var fileSystemParams = new FileSystemParameters(fileSystemClass, null);
  118. fileSystemParams.AddParameter(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices);
  119. fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices);
  120. fileSystemParams.AddParameter(FileSystemParametersDefine.DISABLE_UNITY_WEB_CACHE, disableUnityWebCache);
  121. return fileSystemParams;
  122. }
  123. #endregion
  124. }
  125. }