Esempio n. 1
0
    /// <summary>
    /// 已经存在资源,或者加载失败后操作
    /// </summary>
    /// <param name="id"></param>
    /// <param name="stPath"></param>
    private void LoaderOperater(string id, StResPath stPath)
    {
        ResLoaderOrder resLoaderOrder = this.GetWwwLoaderOrderByOrderName(id);

        if (resLoaderOrder == null)
        {
            return;
        }
        //刷新队列加载情况
        resLoaderOrder.UpdateLoaderOrderState(stPath);
        //更新当前队列进度
        UpdateListProgressHanler(resLoaderOrder);
        //触发单个文件完成
        resLoaderOrder.InvokeLoaderFileComplete(stPath.path);

        //如果队列完成通知结束
        if (resLoaderOrder.IsFinished())
        {
            this._orderList.Remove(resLoaderOrder);
            resLoaderOrder.InvokeLoaderListComplete();
            resLoaderOrder.Dispose();
            resLoaderOrder = null;
        }
        //next
        LoadThreadManager.instance.CheckQueue();
    }
Esempio n. 2
0
 /// <summary>
 /// 加载队列总进度
 /// </summary>
 private void UpdateListProgressHanler(ResLoaderOrder loaderOrder)
 {
     if (loaderOrder != null)
     {
         loaderOrder.InvokeLoaderListProgress();
     }
 }
Esempio n. 3
0
    /// <summary>
    /// 加载进度
    /// </summary>
    /// <param name="orderId"></param>
    /// <param name="path"></param>
    /// <param name="currentValue"></param>
    /// <param name="totalValue"></param>
    private void OnProgressHandler(string orderId, string path, float currentValue)
    {
        ResLoaderOrder resLoaderOrder = this.GetWwwLoaderOrderByOrderName(orderId);

        if (resLoaderOrder == null)
        {
            return;
        }

        resLoaderOrder.InvokeLoaderProgress(path, currentValue);
    }
Esempio n. 4
0
    /// <summary>
    /// 加载错误
    /// </summary>
    /// <param name="resLoader"></param>
    /// <param name="errorText"></param>
    private void OnErrorHandler(ResLoader resLoader, string errorText)
    {
        ResLoaderOrder resLoaderOrder = this.GetWwwLoaderOrderByOrderName(resLoader.ownerId);

        if (resLoaderOrder == null)
        {
            return;
        }

        resLoaderOrder.InvokeLoaderError(resLoader.stResPath.path, errorText);
        this.LoaderOperater(resLoader.ownerId, resLoader.stResPath);
    }
Esempio n. 5
0
    /// <summary>
    /// 加载完成后操作
    /// </summary>
    /// <param name="resLoader"></param>
    /// <param name="www"></param>
    private void LoaderOperater(ResLoader resLoader, WWW www)
    {
        if (resLoader == null)
        {
            return;
        }

        ResLoaderOrder resLoaderOrder = this.GetWwwLoaderOrderByOrderName(resLoader.ownerId);

        if (resLoaderOrder == null)
        {
            return;
        }
        bool existsStatus = ResDataManager.instance.ExistWWWData(resLoader.stResPath.path);

        if (!existsStatus)
        {
            VOAssetInfo resInfo = new VOAssetInfo(www, resLoader.stResPath.path, resLoader.stResPath.tag);
            if (www != null)
            {
                ResDataManager.instance.InsertWWWData(resInfo);
            }
            else
            {
                if (LoadThreadManager.showDebug)
                {
                    Log.info("ResLoaderManager::InsertWWWData www is Null!!");
                }
            }
        }
        //刷新队列加载情况
        resLoaderOrder.UpdateLoaderOrderState(resLoader.stResPath);
        //加载完成,析构resLoader,解除loaderItem监听
        resLoader.UnLoader(this.OnProgressHandler, this.OnCompleteHandler, this.OnErrorHandler, false);
        //更新当前队列进度
        UpdateListProgressHanler(resLoaderOrder);
        //触发单个文件完成
        resLoaderOrder.InvokeLoaderFileComplete(resLoader.stResPath.path);
        //如果队列完成通知结束
        if (resLoaderOrder.IsFinished())
        {
            this._orderList.Remove(resLoaderOrder);
            resLoaderOrder.InvokeLoaderListComplete();
            resLoaderOrder.Dispose();
            resLoaderOrder = null;
        }
        //next
        LoadThreadManager.instance.CheckQueue();
    }
Esempio n. 6
0
    /// <summary>
    /// 空队列
    /// </summary>
    /// <param name="id"></param>
    private void LoaderOperater(string id)
    {
        ResLoaderOrder resLoaderOrder = this.GetWwwLoaderOrderByOrderName(id);

        if (resLoaderOrder == null)
        {
            return;
        }

        this._orderList.Remove(resLoaderOrder);
        resLoaderOrder.InvokeLoaderListComplete();
        resLoaderOrder.Dispose();
        resLoaderOrder = null;
        //next
        LoadThreadManager.instance.CheckQueue();
    }
Esempio n. 7
0
    /// <summary>
    /// 根据序列名称检索加载序列
    /// </summary>
    /// <returns>The www loader order by id.</returns>
    /// <param name="id">id.</param>
    private ResLoaderOrder GetWwwLoaderOrderByOrderName(string id)
    {
        if (this._orderList == null || this._orderList.Count == 0)
        {
            return(null);
        }
        int len = this._orderList.Count;

        for (int i = 0; i < len; i++)
        {
            ResLoaderOrder resLoaderOrder = this._orderList[i];
            if (resLoaderOrder.Id == id)
            {
                return(resLoaderOrder);
            }
        }
        return(null);
    }
Esempio n. 8
0
    /// <summary>
    /// 队列加载
    /// </summary>
    /// <param name="pathList"></param>
    /// <param name="id"></param>
    /// <param name="loaderListComplete">队列加载完成</param>
    /// <param name="loaderProgress">单个文件进度</param>
    /// <param name="loaderError">单个文件错误</param>
    /// <param name="loaderListProgress">队列进度</param>
    /// <param name="loaderFileComplete">单个加载完成</param>
    /// <param name="param"></param>
    public void Loader(
        List <StResPath> pathList,
        string id,
        ResLoaderManager.DelegateListLoaded loaderListComplete,
        ResLoaderManager.DelegateLoaderProgress loaderProgress         = null,
        ResLoaderManager.DelegateLoaderError loaderError               = null,
        ResLoaderManager.DelageteLoaderListProgress loaderListProgress = null,
        ResLoaderManager.DelegateFileLoaded loaderFileComplete         = null,
        object param = null)

    {
        if (this._orderList == null)
        {
            this._orderList = new List <ResLoaderOrder>();
        }
        //去重处理
        ResLoaderOrder resLoaderOrder = this.GetWwwLoaderOrderByOrderName(id);

        if (resLoaderOrder != null)
        {
            if (LoadThreadManager.showDebug)
            {
                Log.info("[Warn! 与当前加载中的list名相同,请确保唯一性!] id: " + id);
            }
            //如果已有相同的资源在加载,添加新回调
            resLoaderOrder.AttachEvent(loaderListComplete, loaderProgress, loaderError, loaderListProgress, loaderFileComplete);
            return;
        }


        //添加到订阅队列中
        IList <StResPath> pList = new List <StResPath>(pathList.ToArray());

        resLoaderOrder = new ResLoaderOrder(id, pList, loaderProgress, loaderListComplete, loaderError, loaderListProgress, loaderFileComplete, param);
        this._orderList.Add(resLoaderOrder);

        //遍历订阅文件,开始推入线程加载
        int len = resLoaderOrder.pathList.Count;

        if (len == 0)
        {
            this.LoaderOperater(id);
            return;
        }

        for (int i = 0; i < len; i++)
        {
            StResPath stPath = resLoaderOrder.pathList[i];
            //检查是否在缓存对象中,是否已经加载过
            bool existsStatus = ResDataManager.instance.ExistWWWData(stPath.path);
            if (!existsStatus)
            {//不存在,加载并缓存
                ResLoader resLoader = new ResLoader(resLoaderOrder.Id);
                resLoader.Loader(stPath, OnProgressHandler, OnCompleteHandler, OnErrorHandler);
            }
            else
            {//资源已存在,无需加载
                if (LoadThreadManager.showDebug)
                {
                    Log.info("加载 " + stPath.path + " 资源已存在 !");
                }
                this.LoaderOperater(id, stPath);
            }
        }
    }