private void CheckNext(PackageResourceLoaderElement currentDoneElement) { if (!currentDoneElement.HavError()) { // update process m_fCurrentProcess = (float)m_TaskSucceedQueue.Count / (float)m_iTotalLoadCount; if (null != m_ProcessCallback) { m_ProcessCallback(m_fCurrentProcess, currentDoneElement.GetName()); } } // check is all done if (m_iTotalLoadCount == (m_TaskSucceedQueue.Count + m_TaskErrorQueue.Count)) { // all done check CheckComplate(); } else { // start task StartTask(); } }
private IEnumerator BeginLoad(PackageResourceLoaderElement taskElem) { Debug.Log(taskElem.GetUrl()); PackageResourceWWWElement loader = new PackageResourceWWWElement(taskElem.GetUrl()); yield return(loader); // update loader count --m_iCurrentLoaderCount; if (m_bIsCrash) { loader.GetRequest().Dispose(); if (m_iCurrentLoaderCount == 0) { m_bIsRunning = false; } } else { OnOneTaskDone(taskElem, loader); } }
private void OnOneTaskDone(PackageResourceLoaderElement taskElem, PackageResourceWWWElement request) { do { if (request.GetError() != null) { taskElem.SetErrorInfo(request.GetError()); // release www request.GetRequest().Dispose(); // add to error list m_TaskErrorQueue.Enqueue(taskElem); break; } // check www content if (null == request.GetRequest().bytes) { taskElem.SetErrorInfo("load error"); // release www request.GetRequest().Dispose(); // add to error list m_TaskErrorQueue.Enqueue(taskElem); break; } try { byte[] content = request.GetRequest().bytes; if (null != m_Decompressor) { // decompress content = m_Decompressor.Decompress(content); } // ensure folder PackageResourceTool.EnsureFolder(taskElem.GetOutputPath()); // try write byte files System.IO.File.WriteAllBytes(taskElem.GetOutputPath(), content); // add to succeed list m_TaskSucceedQueue.Enqueue(taskElem); } catch (Exception e) { // mark error msg taskElem.SetErrorInfo(e.Message); // release www request.GetRequest().Dispose(); // add to error list m_TaskErrorQueue.Enqueue(taskElem); // check is need crash m_bIsCrash = true; CallbackWithError(); return; } }while (false); // check next CheckNext(taskElem); }