Example #1
0
        public void setItem(IGLoaderItem item)
        {
            if (_wwwRequest != null)
            {
                _wwwRequest.Dispose();
                _wwwRequest = null;
            }

            try
            {
                _wwwRequest = new WWW(item.URL);
                _completed  = false;
                _item       = item;
            }
            catch
            {
                if (_wwwRequest != null)
                {
                    _wwwRequest.Dispose();
                    _wwwRequest = null;
                }
                Debug.Log(String.Format("[URL]_#{0}", item.URL));
                _item.LoadErrorHandler();
                _item = null;

                _completed = true;
            }
        }
Example #2
0
 public void StartDownload(IGLoaderItem item)
 {
     if (isUseLocal)
     {
         _readWaitQueue.Add(item);
     }
     else
     {
         _waitQueue.Add(item);
     }
 }
Example #3
0
        public void SetItem(IGLoaderItem item)
        {
            this.item   = item;
            isCompleted = false;

            try
            {
                resourceRequest = Resources.LoadAsync(this.item.URL);
            }
            catch (Exception)
            {
                this.item.LoadErrorHandler();
            }
        }
Example #4
0
        public bool update(float detlaTime)
        {
            if (!_completed)
            {
                if (_completed = (_wwwRequest != null && _wwwRequest.isDone))
                {
                    try
                    {
                        if (_wwwRequest.error == null)
                        {
                            _item.LoadCompleteHandler(_wwwRequest.assetBundle);
                        }
                        else
                        {
                            _item.LoadErrorHandler();
                            Debug.Log(string.Format("[Error]{0}  [URL]{1}", _wwwRequest.error, _wwwRequest.url));
                        }
                    }
                    catch
                    {
                        _item.LoadErrorHandler();
                    }
                    finally
                    {
                        if (_wwwRequest.responseHeaders.ContainsKey("CONTENT-LENGTH"))
                        {
                            _item.GetLoadingDataLength(_wwwRequest.responseHeaders["CONTENT-LENGTH"]);
                        }
                        else
                        {
                            string param = "0";
                            _item.GetLoadingDataLength(param);
                        }

                        _wwwRequest.Dispose();
                        _wwwRequest = null;

                        _item = null;
                    }
                }
                else
                {
                    //未完成,更新进度
                    //_wwwRequest.progress
                    _item.GetLoadingProgress(_wwwRequest.progress);
                }
            }

            return(_completed);
        }
Example #5
0
 public bool removeItem(IGLoaderItem item)
 {
     if (isUseLocal)
     {
         if (_readWaitQueue.Remove(item) == true)
         {
             //TODO :clean
             return(true);
         }
         return(false);
     }
     else
     {
         if (_waitQueue.Remove(item) == true)
         {
             //TODO :clean
             return(true);
         }
         return(false);
     }
 }
Example #6
0
        public void FrameUpdate(float deltaTime)
        {
            GGameDataLoaderProcesser processer;

            for (int i = 0; i < _runningList.Count;)
            {
                processer = _runningList[i];

                if (processer.update(deltaTime))
                {
                    _runningList.RemoveAt(i);
                    _idleQueue.Enqueue(processer);
                }
                else
                {
                    ++i;
                }
            }

            while (_waitQueue.Count > 0 && _idleQueue.Count > 0 && _runningList.Count < _currentThreadNum)
            {
                IGLoaderItem item = _waitQueue[0];
                if (item != null)
                {
                    processer = _idleQueue.Dequeue();
                    processer.setItem(item);
                    _runningList.Add(processer);
                    removeItem(item);
                }
            }

            #region Local
            if (isUseLocal)
            {
                //// 磁盘IO更新
                GGameLocalLoaderProcesser localProcesser;
                //更新正在运行的IO线程
                for (int i = 0; i < _ioRunningList.Count;)
                {
                    localProcesser = _ioRunningList[i];

                    if (localProcesser.Update(deltaTime))
                    {
                        _ioRunningList.RemoveAt(i);
                        _ioIdleQueue.Enqueue(localProcesser);
                    }
                    else
                    {
                        ++i;
                    }
                }

                //如果有空闲IO线程则分配任务
                while (_readWaitQueue.Count > 0 && _ioIdleQueue.Count > 0 &&
                       _ioRunningList.Count < _ioThreadNum)
                {
                    if (_readWaitQueue.Count > 0)
                    {
                        try
                        {
                            localProcesser = _ioIdleQueue.Dequeue();
                            localProcesser.SetItem(_readWaitQueue[0]);
                            _ioRunningList.Add(localProcesser);
                        }
                        catch (System.Exception ex)
                        {
                            _readWaitQueue[0].LoadErrorHandler();
                        }
                        _readWaitQueue.RemoveAt(0);
                    }
                }
            }
            #endregion
        }