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; } }
public void StartDownload(IGLoaderItem item) { if (isUseLocal) { _readWaitQueue.Add(item); } else { _waitQueue.Add(item); } }
public void SetItem(IGLoaderItem item) { this.item = item; isCompleted = false; try { resourceRequest = Resources.LoadAsync(this.item.URL); } catch (Exception) { this.item.LoadErrorHandler(); } }
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); }
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); } }
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 }