コード例 #1
0
        /// <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;
        }
コード例 #2
0
            /// <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);
            }
コード例 #3
0
        /// <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;
        }
コード例 #4
0
        /// <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;
        }
コード例 #5
0
                /// <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;
                }
コード例 #6
0
                /// <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;
                }
コード例 #7
0
            /// <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);
            }
コード例 #8
0
        /// <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;
        }
コード例 #9
0
                /// <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;
                }
コード例 #10
0
            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);
            }
コード例 #11
0
        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);
        }
コード例 #12
0
        /// <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);
        }
コード例 #13
0
 /// <summary>
 /// 设置解密资源回调函数。
 /// </summary>
 /// <param name="decryptResourceCallback">要设置的解密资源回调函数。</param>
 /// <remarks>如果不设置,将使用默认的解密资源回调函数。</remarks>
 public void SetDecryptResourceCallback(DecryptResourceCallback decryptResourceCallback)
 {
     ResourceComponent.This.SetDecryptResourceCallback(decryptResourceCallback);
 }
コード例 #14
0
 /// <summary>
 /// 设置解密资源回调函数。
 /// </summary>
 /// <param name="decryptResourceCallback">要设置的解密资源回调函数。</param>
 /// <remarks>如果不设置,将使用默认的解密资源回调函数。</remarks>
 public void SetDecryptResourceCallback(DecryptResourceCallback decryptResourceCallback)
 {
     m_ResourceManager.SetDecryptResourceCallback(decryptResourceCallback);
 }
コード例 #15
0
            /// <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);
            }
コード例 #16
0
 /// <summary>
 /// 设置解密资源回调函数。
 /// </summary>
 /// <param name="decryptResourceCallback">要设置的解密资源回调函数。</param>
 /// <remarks>如果不设置,将使用默认的解密资源回调函数。</remarks>
 public void SetDecryptResourceCallback(DecryptResourceCallback decryptResourceCallback)
 {
     throw new NotSupportedException("SetDecryptResourceCallback");
 }
コード例 #17
0
 public void SetDecryptResourceCallback(DecryptResourceCallback decryptResourceCallback)
 {
     //throw new NotImplementedException();
 }