/// <summary> /// 初始化资源管理器的新实例。 /// </summary> public ResourceManager() { ResourceNameComparer resourceNameComparer = new ResourceNameComparer(); m_AssetInfos = new Dictionary <string, AssetInfo>(); m_AssetDependencyInfos = new Dictionary <string, AssetDependencyInfo>(); m_ResourceInfos = new Dictionary <ResourceName, ResourceInfo>(resourceNameComparer); m_ResourceGroups = new Dictionary <string, ResourceGroup>(); m_ReadWriteResourceInfos = new SortedDictionary <ResourceName, ReadWriteResourceInfo>(resourceNameComparer); m_ResourceIniter = null; m_ResourceLoader = new ResourceLoader(this); m_ResourceHelper = null; m_ReadOnlyPath = null; m_ReadWritePath = null; m_ResourceMode = ResourceMode.Unspecified; m_RefuseSetCurrentVariant = false; m_CurrentVariant = null; m_UpdatePrefixUri = null; m_ApplicableGameVersion = null; m_InternalResourceVersion = 0; m_DecryptResourceCallback = null; m_ResourceInitCompleteEventHandler = null; }
/// <summary> /// 从文件系统中加载二进制资源。 /// </summary> /// <param name="binaryAssetName">要加载二进制资源的名称。</param> /// <param name="buffer">存储加载二进制资源的二进制流。</param> /// <param name="startIndex">存储加载二进制资源的二进制流的起始位置。</param> /// <param name="length">存储加载二进制资源的二进制流的长度。</param> /// <returns>实际加载了多少字节。</returns> public int LoadBinaryFromFileSystem(string binaryAssetName, byte[] buffer, int startIndex, int length) { ResourceInfo resourceInfo = null; string[] dependencyAssetNames = null; if (!CheckAsset(binaryAssetName, out resourceInfo, out dependencyAssetNames)) { throw new GameFrameworkException(Utility.Text.Format("Can not load binary '{0}' from file system which is '{1}'.", binaryAssetName, resourceInfo != null && !resourceInfo.Ready ? LoadResourceStatus.NotReady.ToString() : LoadResourceStatus.NotExist.ToString())); } if (!resourceInfo.IsLoadFromBinary) { throw new GameFrameworkException(Utility.Text.Format("Can not load binary '{0}' from file system which is not a binary asset.", binaryAssetName)); } if (!resourceInfo.UseFileSystem) { throw new GameFrameworkException(Utility.Text.Format("Can not load binary '{0}' from file system which is not use file system.", binaryAssetName)); } IFileSystem fileSystem = m_ResourceManager.GetFileSystem(resourceInfo.FileSystemName, resourceInfo.StorageInReadOnly); int bytesRead = fileSystem.ReadFile(resourceInfo.ResourceName.FullName, buffer, startIndex, length); if (resourceInfo.LoadType == LoadType.LoadFromBinaryAndQuickDecrypt || resourceInfo.LoadType == LoadType.LoadFromBinaryAndDecrypt) { DecryptResourceCallback decryptResourceCallback = m_ResourceManager.m_DecryptResourceCallback ?? DefaultDecryptResourceCallback; decryptResourceCallback(buffer, startIndex, bytesRead, resourceInfo.ResourceName.Name, resourceInfo.ResourceName.Variant, resourceInfo.ResourceName.Extension, resourceInfo.StorageInReadOnly, resourceInfo.FileSystemName, (byte)resourceInfo.LoadType, resourceInfo.Length, resourceInfo.HashCode); } return(bytesRead); }
/// <summary> /// 初始化资源管理器的新实例。 /// </summary> public ResourceManager() { m_AssetInfos = null; m_ResourceInfos = null; m_ReadWriteResourceInfos = new SortedDictionary <ResourceName, ReadWriteResourceInfo>(new ResourceNameComparer()); m_CachedBytesForEncryptedString = new byte[byte.MaxValue]; m_ResourceIniter = null; m_VersionListProcessor = null; m_ResourceChecker = null; m_ResourceUpdater = null; m_ResourceLoader = new ResourceLoader(this); m_ResourceHelper = null; m_ReadOnlyPath = null; m_ReadWritePath = null; m_ResourceMode = ResourceMode.Unspecified; m_RefuseSetCurrentVariant = false; m_CurrentVariant = null; m_UpdatePrefixUri = null; m_ApplicableGameVersion = null; m_InternalResourceVersion = 0; m_UpdateFileCache = null; m_DecompressCache = null; m_DecryptResourceCallback = null; m_InitResourcesCompleteCallback = null; m_UpdateVersionListCallbacks = null; m_CheckResourcesCompleteCallback = null; m_UpdateResourcesCompleteCallback = null; m_ResourceUpdateStartEventHandler = null; m_ResourceUpdateChangedEventHandler = null; m_ResourceUpdateSuccessEventHandler = null; m_ResourceUpdateFailureEventHandler = null; }
/// <summary> /// 初始化资源管理器的新实例。 /// </summary> public ResourceManager() { m_AssetInfos = new Dictionary <string, AssetInfo>(); m_AssetDependencyInfos = new Dictionary <string, AssetDependencyInfo>(); m_ResourceInfos = new Dictionary <ResourceName, ResourceInfo>(); m_ResourceGroups = new Dictionary <string, ResourceGroup>(); m_ReadWriteResourceInfos = new SortedDictionary <ResourceName, ReadWriteResourceInfo>(new ResourceNameComparer()); m_ResourceIniter = null; m_VersionListProcessor = null; m_ResourceChecker = null; m_ResourceUpdater = null; m_ResourceLoader = new ResourceLoader(this); m_ResourceHelper = null; m_ReadOnlyPath = null; m_ReadWritePath = null; m_ResourceMode = ResourceMode.Unspecified; m_RefuseSetCurrentVariant = false; m_CurrentVariant = null; m_UpdatePrefixUri = null; m_ApplicableGameVersion = null; m_InternalResourceVersion = 0; m_DecryptResourceCallback = null; m_ResourceInitCompleteEventHandler = null; m_VersionListUpdateSuccessEventHandler = null; m_VersionListUpdateFailureEventHandler = null; m_ResourceCheckCompleteEventHandler = null; m_ResourceUpdateStartEventHandler = null; m_ResourceUpdateChangedEventHandler = null; m_ResourceUpdateSuccessEventHandler = null; m_ResourceUpdateFailureEventHandler = null; m_ResourceUpdateAllCompleteEventHandler = null; }
/// <summary> /// 初始化加载资源代理的新实例。 /// </summary> /// <param name="loadResourceAgentHelper">加载资源代理辅助器。</param> /// <param name="resourceHelper">资源辅助器。</param> /// <param name="resourceLoader">加载资源器。</param> /// <param name="readOnlyPath">资源只读区路径。</param> /// <param name="readWritePath">资源读写区路径。</param> /// <param name="decryptResourceCallback">解密资源回调函数。</param> public LoadResourceAgent(ILoadResourceAgentHelper loadResourceAgentHelper, IResourceHelper resourceHelper, ResourceLoader resourceLoader, string readOnlyPath, string readWritePath, DecryptResourceCallback decryptResourceCallback) { if (loadResourceAgentHelper == null) { throw new GameFrameworkException("Load resource agent helper is invalid."); } if (resourceHelper == null) { throw new GameFrameworkException("Resource helper is invalid."); } if (resourceLoader == null) { throw new GameFrameworkException("Resource loader is invalid."); } if (decryptResourceCallback == null) { throw new GameFrameworkException("Decrypt resource callback is invalid."); } m_Helper = loadResourceAgentHelper; m_ResourceHelper = resourceHelper; m_ResourceLoader = resourceLoader; m_ReadOnlyPath = readOnlyPath; m_ReadWritePath = readWritePath; m_DecryptResourceCallback = decryptResourceCallback; m_Task = null; }
/// <summary> /// 初始化加载资源代理的新实例。 /// </summary> /// <param name="loadResourceAgentHelper">加载资源代理辅助器。</param> /// <param name="resourceHelper">资源辅助器。</param> /// <param name="resourceLoader">加载资源器。</param> /// <param name="readOnlyPath">资源只读区路径。</param> /// <param name="readWritePath">资源读写区路径。</param> /// <param name="decryptResourceCallback">解密资源回调函数。</param> public LoadResourceAgent(ILoadResourceAgentHelper loadResourceAgentHelper, IResourceHelper resourceHelper, ResourceLoader resourceLoader, string readOnlyPath, string readWritePath, DecryptResourceCallback decryptResourceCallback) { if (loadResourceAgentHelper == null) { throw new GameFrameworkException("Load resource agent helper is invalid."); } if (resourceHelper == null) { throw new GameFrameworkException("Resource helper is invalid."); } if (resourceLoader == null) { throw new GameFrameworkException("Resource loader is invalid."); } if (decryptResourceCallback == null) { throw new GameFrameworkException("Decrypt resource callback is invalid."); } m_Helper = loadResourceAgentHelper; m_ResourceHelper = resourceHelper; m_ResourceLoader = resourceLoader; m_ReadOnlyPath = readOnlyPath; m_ReadWritePath = readWritePath; m_DecryptResourceCallback = decryptResourceCallback; m_LoadingDependencyAssetNames = new LinkedList <string>(); m_Task = null; m_WaitingType = WaitingType.None; m_LoadingAsset = false; m_LoadingResource = false; }
/// <summary> /// 从文件系统中加载二进制资源的片段。 /// </summary> /// <param name="binaryAssetName">要加载片段的二进制资源的名称。</param> /// <param name="offset">要加载片段的偏移。</param> /// <param name="buffer">存储加载二进制资源片段内容的二进制流。</param> /// <param name="startIndex">存储加载二进制资源片段内容的二进制流的起始位置。</param> /// <param name="length">要加载片段的长度。</param> /// <returns>实际加载了多少字节。</returns> public int LoadBinarySegmentFromFileSystem(string binaryAssetName, int offset, byte[] buffer, int startIndex, int length) { ResourceInfo resourceInfo = GetResourceInfo(binaryAssetName); if (resourceInfo == null) { throw new GameFrameworkException(Utility.Text.Format("Can not load binary '{0}' from file system which is not exist.", binaryAssetName)); } if (!resourceInfo.Ready) { throw new GameFrameworkException(Utility.Text.Format("Can not load binary '{0}' from file system which is not ready.", binaryAssetName)); } if (!resourceInfo.IsLoadFromBinary) { throw new GameFrameworkException(Utility.Text.Format("Can not load binary '{0}' from file system which is not a binary asset.", binaryAssetName)); } if (!resourceInfo.UseFileSystem) { throw new GameFrameworkException(Utility.Text.Format("Can not load binary '{0}' from file system which is not use file system.", binaryAssetName)); } IFileSystem fileSystem = m_ResourceManager.GetFileSystem(resourceInfo.FileSystemName, resourceInfo.StorageInReadOnly); int bytesRead = fileSystem.ReadFileSegment(resourceInfo.ResourceName.FullName, offset, buffer, startIndex, length); if (resourceInfo.LoadType == LoadType.LoadFromBinaryAndQuickDecrypt || resourceInfo.LoadType == LoadType.LoadFromBinaryAndDecrypt) { DecryptResourceCallback decryptResourceCallback = m_ResourceManager.m_DecryptResourceCallback ?? DefaultDecryptResourceCallback; decryptResourceCallback(buffer, startIndex, bytesRead, resourceInfo.ResourceName.Name, resourceInfo.ResourceName.Variant, resourceInfo.ResourceName.Extension, resourceInfo.StorageInReadOnly, resourceInfo.FileSystemName, (byte)resourceInfo.LoadType, resourceInfo.Length, resourceInfo.HashCode); } return(bytesRead); }
/// <summary> /// 设置解密资源回调函数。 /// </summary> /// <param name="decryptResourceCallback">要设置的解密资源回调函数。</param> /// <remarks>如果不设置,将使用默认的解密资源回调函数。</remarks> public void SetDecryptResourceCallback(DecryptResourceCallback decryptResourceCallback) { if (m_ResourceLoader.TotalAgentCount > 0) { throw new AshException("You must set decrypt resource callback before add load resource agent helper."); } m_DecryptResourceCallback = decryptResourceCallback; }
/// <summary> /// 初始化加载资源代理的新实例。 /// </summary> /// <param name="loadResourceAgentHelper">加载资源代理辅助器。</param> /// <param name="resourceHelper">资源辅助器。</param> /// <param name="assetPool">资源对象池。</param> /// <param name="resourcePool">资源对象池。</param> /// <param name="resourceLoader">加载资源器。</param> /// <param name="readOnlyPath">资源只读区路径。</param> /// <param name="readWritePath">资源读写区路径。</param> /// <param name="decryptResourceCallback">解密资源回调函数。</param> public LoadResourceAgent(ILoadResourceAgentHelper loadResourceAgentHelper, IResourceHelper resourceHelper, IObjectPool <AssetObject> assetPool, IObjectPool <ResourceObject> resourcePool, ResourceLoader resourceLoader, string readOnlyPath, string readWritePath, DecryptResourceCallback decryptResourceCallback) { if (loadResourceAgentHelper == null) { throw new System.Exception("Load resource agent helper is invalid."); } if (resourceHelper == null) { throw new System.Exception("Resource helper is invalid."); } if (assetPool == null) { throw new System.Exception("Asset pool is invalid."); } if (resourcePool == null) { throw new System.Exception("Resource pool is invalid."); } if (resourceLoader == null) { throw new System.Exception("Resource loader is invalid."); } if (decryptResourceCallback == null) { throw new System.Exception("Decrypt resource callback is invalid."); } m_Helper = loadResourceAgentHelper; m_ResourceHelper = resourceHelper; m_AssetPool = assetPool; m_ResourcePool = resourcePool; m_ResourceLoader = resourceLoader; m_ReadOnlyPath = readOnlyPath; m_ReadWritePath = readWritePath; m_DecryptResourceCallback = decryptResourceCallback; m_LoadingDependencyAssetNames = new LinkedList <string>(); m_Task = null; m_WaitingType = WaitingType.None; m_LoadingAsset = false; m_LoadingResource = false; }
private void OnLoadBinarySuccess(string fileUri, byte[] bytes, float duration, object userData) { LoadBinaryInfo loadBinaryInfo = (LoadBinaryInfo)userData; if (loadBinaryInfo == null) { throw new GameFrameworkException("Load binary info is invalid."); } if (loadBinaryInfo.ResourceInfo.LoadType == LoadType.LoadFromBinaryAndQuickDecrypt || loadBinaryInfo.ResourceInfo.LoadType == LoadType.LoadFromBinaryAndDecrypt) { DecryptResourceCallback decryptResourceCallback = m_ResourceManager.m_DecryptResourceCallback ?? DefaultDecryptResourceCallback; bytes = decryptResourceCallback(loadBinaryInfo.ResourceInfo.ResourceName.Name, loadBinaryInfo.ResourceInfo.ResourceName.Variant, (byte)loadBinaryInfo.ResourceInfo.LoadType, loadBinaryInfo.ResourceInfo.Length, loadBinaryInfo.ResourceInfo.HashCode, loadBinaryInfo.ResourceInfo.StorageInReadOnly, bytes); } loadBinaryInfo.LoadBinaryCallbacks.LoadBinarySuccessCallback(loadBinaryInfo.BinaryAssetName, bytes, duration, loadBinaryInfo.UserData); ReferencePool.Release(loadBinaryInfo); }
private void OnLoadBinarySuccess(string fileUri, byte[] bytes, float duration, object userData) { LoadBinaryInfo loadBinaryInfo = (LoadBinaryInfo)userData; if (loadBinaryInfo == null) { throw new Exception("Load binary info is invalid."); } ResourceInfo resourceInfo = loadBinaryInfo.ResourceInfo; if (resourceInfo.LoadType == LoadType.LoadFromBinaryAndQuickDecrypt || resourceInfo.LoadType == LoadType.LoadFromBinaryAndDecrypt) { DecryptResourceCallback decryptResourceCallback = m_ResourceComponent.DecryptResourceCallback ?? DefaultDecryptResourceCallback; decryptResourceCallback(bytes, 0, bytes.Length, resourceInfo.ResourceName.Name, resourceInfo.ResourceName.Variant, resourceInfo.ResourceName.Extension, resourceInfo.StorageInReadOnly, resourceInfo.FileSystemName, (byte)resourceInfo.LoadType, resourceInfo.Length, resourceInfo.HashCode); } loadBinaryInfo.LoadBinaryCallbacks.LoadBinarySuccessCallback(loadBinaryInfo.BinaryAssetName, bytes, duration, loadBinaryInfo.UserData); ReferencePool.Release(loadBinaryInfo); }
/// <summary> /// 从文件系统中加载二进制资源的片段。 /// </summary> /// <param name="binaryAssetName">要加载片段的二进制资源的名称。</param> /// <param name="offset">要加载片段的偏移。</param> /// <param name="length">要加载片段的长度。</param> /// <returns>存储加载二进制资源片段内容的二进制流。</returns> public byte[] LoadBinarySegmentFromFileSystem(string binaryAssetName, int offset, int length) { ResourceInfo resourceInfo = GetResourceInfo(binaryAssetName, AssetCategory.Binary); if (resourceInfo == null) { throw new Exception(Utility.Text.Format("Can not load binary '{0}' from file system which is not exist.", binaryAssetName)); } if (!resourceInfo.Ready) { throw new Exception(Utility.Text.Format("Can not load binary '{0}' from file system which is not ready.", binaryAssetName)); } if (!resourceInfo.IsLoadFromBinary) { throw new Exception(Utility.Text.Format("Can not load binary '{0}' from file system which is not a binary asset.", binaryAssetName)); } if (!resourceInfo.UseFileSystem) { throw new Exception(Utility.Text.Format("Can not load binary '{0}' from file system which is not use file system.", binaryAssetName)); } IFileSystem fileSystem = m_ResourceComponent.GetFileSystem(resourceInfo.FileSystemName, resourceInfo.StorageInReadOnly); byte[] bytes = fileSystem.ReadFileSegment(resourceInfo.ResourceName.FullName, offset, length); if (bytes == null) { return(null); } if (resourceInfo.LoadType == LoadType.LoadFromBinaryAndQuickDecrypt || resourceInfo.LoadType == LoadType.LoadFromBinaryAndDecrypt) { DecryptResourceCallback decryptResourceCallback = m_ResourceComponent.DecryptResourceCallback ?? DefaultDecryptResourceCallback; decryptResourceCallback(bytes, 0, bytes.Length, resourceInfo.ResourceName.Name, resourceInfo.ResourceName.Variant, resourceInfo.ResourceName.Extension, resourceInfo.StorageInReadOnly, resourceInfo.FileSystemName, (byte)resourceInfo.LoadType, resourceInfo.Length, resourceInfo.HashCode); } return(bytes); }
/// <summary> /// 设置解密资源回调函数。 /// </summary> /// <param name="decryptResourceCallback">要设置的解密资源回调函数。</param> /// <remarks>如果不设置,将使用默认的解密资源回调函数。</remarks> public void SetDecryptResourceCallback(DecryptResourceCallback decryptResourceCallback) { ResourceComponent.This.SetDecryptResourceCallback(decryptResourceCallback); }
/// <summary> /// 设置解密资源回调函数。 /// </summary> /// <param name="decryptResourceCallback">要设置的解密资源回调函数。</param> /// <remarks>如果不设置,将使用默认的解密资源回调函数。</remarks> public void SetDecryptResourceCallback(DecryptResourceCallback decryptResourceCallback) { m_ResourceManager.SetDecryptResourceCallback(decryptResourceCallback); }
/// <summary> /// 增加加载资源代理辅助器。 /// </summary> /// <param name="loadResourceAgentHelper">要增加的加载资源代理辅助器。</param> /// <param name="resourceHelper">资源辅助器。</param> /// <param name="readOnlyPath">资源只读区路径。</param> /// <param name="readWritePath">资源读写区路径。</param> /// <param name="decryptResourceCallback">要设置的解密资源回调函数。</param> public void AddLoadResourceAgentHelper(ILoadResourceAgentHelper loadResourceAgentHelper, IResourceHelper resourceHelper, string readOnlyPath, string readWritePath, DecryptResourceCallback decryptResourceCallback) { if (m_AssetPool == null || m_ResourcePool == null) { throw new GameFrameworkException("You must set object pool manager first."); } LoadResourceAgent agent = new LoadResourceAgent(loadResourceAgentHelper, resourceHelper, m_AssetPool, m_ResourcePool, this, readOnlyPath, readWritePath, decryptResourceCallback ?? DefaultDecryptResourceCallback); m_TaskPool.AddAgent(agent); }
/// <summary> /// 设置解密资源回调函数。 /// </summary> /// <param name="decryptResourceCallback">要设置的解密资源回调函数。</param> /// <remarks>如果不设置,将使用默认的解密资源回调函数。</remarks> public void SetDecryptResourceCallback(DecryptResourceCallback decryptResourceCallback) { throw new NotSupportedException("SetDecryptResourceCallback"); }
public void SetDecryptResourceCallback(DecryptResourceCallback decryptResourceCallback) { //throw new NotImplementedException(); }