public ResourceRequireData(
			string path , bool autosave , long utime , bool autoClear ,
			RESOURCE_TYPE type, ENCRYPT_TYPE encrypt_type, DecryptBytesFunc decryptFunc
			)
        {
            this.m_strFilePath = path;
            this.m_cPathUri = new Uri(path);
            this.m_lUTime = utime;
            this.m_bAutoSave = autosave;
            this.m_bAutoClear = autoClear;
            this.m_eResType = type;
            this.m_eEncryType = encrypt_type;
            this.m_funDecryptFunc = decryptFunc;
            this.m_fLastUseTime = Time.fixedTime;
        }
 public ResourceRequireData(
     string path, bool autosave, long utime, bool autoClear,
     RESOURCE_TYPE type, ENCRYPT_TYPE encrypt_type, DecryptBytesFunc decryptFunc
     )
 {
     this.m_strFilePath    = path;
     this.m_cPathUri       = new Uri(path);
     this.m_lUTime         = utime;
     this.m_bAutoSave      = autosave;
     this.m_bAutoClear     = autoClear;
     this.m_eResType       = type;
     this.m_eEncryType     = encrypt_type;
     this.m_funDecryptFunc = decryptFunc;
     this.m_fLastUseTime   = Time.fixedTime;
 }
 /// <summary>
 /// 开始WW加载
 /// </summary>
 /// <param name="path"></param>
 /// <param name="crc"></param>
 /// <param name="version"></param>
 /// <param name="callback"></param>
 /// <param name="res_type"></param>
 /// <param name="encrypt_type"></param>
 /// <param name="decryptFunc"></param> 
 public static LoadPackage StartWWW(
     string path ,
     bool autosave = false , long utime = 0 , DOWN_FINISH_CALLBACK callback = null,
     DOWN_ERROR_CALLBACK error_call = null,
     RESOURCE_TYPE res_type = RESOURCE_TYPE.WEB_ASSETBUNLDE,
     ENCRYPT_TYPE encrypt_type = ENCRYPT_TYPE.NORMAL,
     DecryptBytesFunc decryptFunc = null
     )
 {
     GameObject obj = new GameObject("WWWLoad");
     LoadPackage loader = obj.AddComponent<LoadPackage>();
     loader.Init(
         path , autosave ,utime , callback,error_call,
         res_type, encrypt_type, decryptFunc);
     loader.StartCoroutine("Load");
     return loader;
 }
        private bool m_bAutoSave;                     //auto save function.

        /// <summary>
        /// 开始WW加载
        /// </summary>
        /// <param name="path"></param>
        /// <param name="crc"></param>
        /// <param name="version"></param>
        /// <param name="callback"></param>
        /// <param name="res_type"></param>
        /// <param name="encrypt_type"></param>
        /// <param name="decryptFunc"></param>
        public static LoadPackage StartWWW(
            string path,
            bool autosave = false, long utime = 0, DOWN_FINISH_CALLBACK callback = null,
            DOWN_ERROR_CALLBACK error_call = null,
            RESOURCE_TYPE res_type         = RESOURCE_TYPE.WEB_ASSETBUNLDE,
            ENCRYPT_TYPE encrypt_type      = ENCRYPT_TYPE.NORMAL,
            DecryptBytesFunc decryptFunc   = null
            )
        {
            GameObject  obj    = new GameObject("WWWLoad");
            LoadPackage loader = obj.AddComponent <LoadPackage>();

            loader.Init(
                path, autosave, utime, callback, error_call,
                res_type, encrypt_type, decryptFunc);
            loader.StartCoroutine("Load");
            return(loader);
        }
 /// <summary>
 /// 初始化
 /// </summary>
 /// <param name="id"></param>
 private void Init(
     string path,
     bool autosave = false, long utime = 0,
     DOWN_FINISH_CALLBACK callback  = null,
     DOWN_ERROR_CALLBACK error_call = null,
     RESOURCE_TYPE res_type         = RESOURCE_TYPE.WEB_ASSETBUNLDE,
     ENCRYPT_TYPE encrypt_type      = ENCRYPT_TYPE.NORMAL,
     DecryptBytesFunc decryptFunc   = null
     )
 {
     this.m_strPath        = path;
     this.m_lUTime         = utime;
     this.m_bComplete      = false;
     this.m_cWww           = null;
     this.m_cCallBack      = callback;
     this.m_cErrorCallBack = error_call;
     this.m_delDecryptFunc = decryptFunc;
     this.m_eEncryptType   = encrypt_type;
     this.m_eResType       = res_type;
     this.m_fProgess       = 0;
     this.m_bAutoSave      = autosave;
 }
        /// <summary>
        /// Requests the resouce.
        /// </summary>
        /// <returns>The resouce.</returns>
        /// <param name="path">Path.</param>
        /// <param name="crc">Crc.</param>
        /// <param name="version">Version.</param>
        /// <param name="autoSave">If set to <c>true</c> auto save.</param>
        /// <param name="utime">Utime.</param>
        /// <param name="autoClear">If set to <c>true</c> auto clear.</param>
        /// <param name="resType">Res type.</param>
        /// <param name="encrypt_type">Encrypt_type.</param>
        /// <param name="func">Func.</param>
        /// <param name="error_call">Error_call.</param>
        /// <param name="arg">Argument.</param>
        public static ResourceRequireOwner RequestResouce(
            string path, bool autoSave, long utime, bool autoClear, RESOURCE_TYPE resType,
            ENCRYPT_TYPE encrypt_type, REQUEST_FINISH_CALLBACK func,
            REQUEST_ERROR_CALLBACK error_call, object[] arg
            )
        {
            if (sInstance.m_delDecryptFunc == null && encrypt_type == ENCRYPT_TYPE.ENCRYPT)
            {
                // Error
                // 没有资源解密接口
                return(null);
            }

            string resName = (new Uri(path)).AbsolutePath;

            ResourceRequireOwner owner = new ResourceRequireOwner();

            owner.m_cResName = resName;
//            owner.m_strResValue = resValue;
            owner.m_delCallBack  = func;
            owner.m_delErrorCall = error_call;
            owner.m_eResType     = resType;
            owner.m_vecArg       = arg;
            if (sInstance.m_eLoadType != LOAD_TYPE.NORMAL)
            {
                UnityEngine.Object obj = LoadEditor(resName);
                if (!sInstance.m_mapRes.ContainsKey(resName))
                {
                    object resData = null;
                    switch (resType)
                    {
                    case RESOURCE_TYPE.WEB_ASSETBUNLDE:
                    case RESOURCE_TYPE.WEB_TEXTURE:
                        resData = obj;
                        break;

                    case RESOURCE_TYPE.WEB_TEXT_BYTES:
                        resData = (obj as TextAsset).bytes;
                        break;

                    case RESOURCE_TYPE.WEB_TEXT_STR:
                        resData = (obj as TextAsset).text;
                        break;
                    }
                    ResourceRequireData data = new ResourceRequireData(resData);
                    sInstance.m_mapRes.Add(resName, data);
                }
                sInstance.m_mapRes[resName].AddRequireOwner(owner);
                sInstance.m_mapRes[resName].Used();
                if (sInstance.m_mapRes[resName].Complete)
                {
                    sInstance.m_mapRes[resName].CompleteCallBack();
                }
                return(owner);
            }

            if (sInstance.m_mapRes.ContainsKey(resName))
            {
                //增加需求者
                sInstance.m_mapRes[resName].AddRequireOwner(owner);
                sInstance.m_mapRes[resName].Used();
                if (sInstance.m_mapRes[resName].Complete)
                {
                    sInstance.m_mapRes[resName].CompleteCallBack();
                }
            }
            else
            {
                ResourceRequireData rrd = new ResourceRequireData(
                    path, autoSave, utime, autoClear, resType,
                    encrypt_type, sInstance.m_delDecryptFunc);
                sInstance.m_lstRequires.Add(rrd);
                sInstance.m_mapRes.Add(resName, rrd);
                rrd.AddRequireOwner(owner);
            }

            return(owner);
        }
        /// <summary>
        /// Requests the resouce.
        /// </summary>
        /// <returns>The resouce.</returns>
        /// <param name="path">Path.</param>
        /// <param name="autoSave">If set to <c>true</c> auto save.</param>
        /// <param name="utime">Utime.</param>
        /// <param name="autoClear">If set to <c>true</c> auto clear.</param>
        /// <param name="resType">Res type.</param>
        /// <param name="encrypt_type">Encrypt_type.</param>
        /// <param name="func">Func.</param>
        /// <param name="error_call">Error_call.</param>
        /// <param name="arg">Argument.</param>
        public static ResourceRequireOwner RequestResouce(
            string path , bool autoSave , long utime , bool autoClear , RESOURCE_TYPE resType,
            ENCRYPT_TYPE encrypt_type, REQUEST_FINISH_CALLBACK func ,
            REQUEST_ERROR_CALLBACK error_call,object[] arg
            )
        {
            if (sInstance.m_delDecryptFunc == null && encrypt_type == ENCRYPT_TYPE.ENCRYPT )
            {
                // Error
                // 没有资源解密接口
                return null;
            }

            string resName = (new Uri(path)).AbsolutePath;

            ResourceRequireOwner owner = new ResourceRequireOwner();
            owner.m_cResName = resName;
            //            owner.m_strResValue = resValue;
            owner.m_delCallBack = func;
            owner.m_delErrorCall = error_call;
            owner.m_eResType = resType;
            owner.m_vecArg = arg;
            if ( sInstance.m_eLoadType != LOAD_TYPE.NORMAL )
            {
                UnityEngine.Object obj = LoadEditor(resName);
                if (!sInstance.m_mapRes.ContainsKey(resName))
                {
                    object resData = null;
                    switch( resType )
                    {
                    case RESOURCE_TYPE.WEB_ASSETBUNLDE:
                    case RESOURCE_TYPE.WEB_TEXTURE:
                        resData = obj;
                        break;
                    case RESOURCE_TYPE.WEB_TEXT_BYTES:
                        resData = (obj as TextAsset).bytes;
                        break;
                    case RESOURCE_TYPE.WEB_TEXT_STR:
                        resData = (obj as TextAsset).text;
                        break;
                    }
                    ResourceRequireData data = new ResourceRequireData(resData);
                    sInstance.m_mapRes.Add(resName, data);
                }
                sInstance.m_mapRes[resName].AddRequireOwner(owner);
                sInstance.m_mapRes[resName].Used();
                if(sInstance.m_mapRes[resName].Complete)
                {
                    sInstance.m_mapRes[resName].CompleteCallBack();
                }
                return owner;
            }

            if (sInstance.m_mapRes.ContainsKey(resName))
            {
                //增加需求者
                sInstance.m_mapRes[resName].AddRequireOwner(owner);
                sInstance.m_mapRes[resName].Used();
                if (sInstance.m_mapRes[resName].Complete)
                {
                    sInstance.m_mapRes[resName].CompleteCallBack();
                }
            }
            else
            {
                ResourceRequireData rrd = new ResourceRequireData(
                    path , autoSave ,utime ,autoClear, resType,
                    encrypt_type, sInstance.m_delDecryptFunc);
                sInstance.m_lstRequires.Add(rrd);
                sInstance.m_mapRes.Add(resName, rrd);
                rrd.AddRequireOwner(owner);
            }

            return owner;
        }
 /// <summary>
 /// 初始化
 /// </summary>
 /// <param name="id"></param>
 private void Init(
     string path ,
     bool autosave = false, long utime = 0,
     DOWN_FINISH_CALLBACK callback = null,
     DOWN_ERROR_CALLBACK error_call = null,
     RESOURCE_TYPE res_type = RESOURCE_TYPE.WEB_ASSETBUNLDE,
     ENCRYPT_TYPE encrypt_type = ENCRYPT_TYPE.NORMAL,
     DecryptBytesFunc decryptFunc = null
     )
 {
     this.m_strPath = path;
     this.m_lUTime = utime;
     this.m_bComplete = false;
     this.m_cWww = null;
     this.m_cCallBack = callback;
     this.m_cErrorCallBack = error_call;
     this.m_delDecryptFunc = decryptFunc;
     this.m_eEncryptType = encrypt_type;
     this.m_eResType = res_type;
     this.m_fProgess = 0;
     this.m_bAutoSave = autosave;
 }