public IEnumerator DownloadData(TempAssetInitManager.DownloadDataEntity data) { MDebug.Log(LOG_TAG, $"Data Begin to be Download! FileName:{data.FileName},MD5:{data.MD5},Size:{data.Size}"); string fileDownLoadUrl = IPathUtility.GetServerDownloadPath() + data.FileName; using (UnityWebRequest request = UnityWebRequest.Get(fileDownLoadUrl)) { UnityWebRequestAsyncOperation asyOperation = request.SendWebRequest(); while (asyOperation != null && !asyOperation.isDone) { long calculateDownloadSize = (long)Math.Ceiling(data.Size * asyOperation.progress); m_SizeOfDownloadingData = calculateDownloadSize; yield return(null); } yield return(asyOperation); if (string.IsNullOrEmpty(request.error)) { string targetFilePath = IPathUtility.GetLocalFilePathPrefix() + data.FileName; FileUtility.CreateFile(targetFilePath, request.downloadHandler.data); string newFileMD5 = FileUtility.GetFileMD5(targetFilePath); //MD5 if (!newFileMD5.Equals(data.MD5)) { MDebug.LogError(LOG_TAG, $"New File MD5 Is Not Equals With DownloadData! FileName:{data.FileName},FileMD5:{newFileMD5},DataMD5:{data.MD5}"); m_CurrentDownloadCoroutine = null; m_SizeOfDownloadingData = data.Size; IsAllDataDownloadFinish = false; m_RoutineAssetFinishCallBack?.Invoke(false, TotalFinishCount, TotalFinishSize); m_IsDownloading = true; MDebug.LogError(LOG_TAG, $"DownloadData file stop! FileName:{data.FileName} Reason:{request.error}"); yield break; } TotalFinishCount++; m_SizeOfDownloadingData = data.Size; m_SizeOfDownloadedData += m_SizeOfDownloadingData; m_SizeOfDownloadingData = 0; m_DownLoadDataQueue.Dequeue(); MDebug.Log(LOG_TAG, $"DownloadData has been Downloaded Success! FileName:{data.FileName},TargetFilePath:{targetFilePath}"); m_SingleAssetDownloadSuccessCallBack?.Invoke(data); if (m_DownLoadDataQueue.Count > 0) { m_IsDownloading = false; IsAllDataDownloadFinish = false; m_CurrentDownloadCoroutine = null; } else { LastestDownloadTotalCount = TotalFinishCount; LastestDownloadTotalSize = TotalFinishSize; m_RoutineAssetFinishCallBack?.Invoke(true, TotalFinishCount, TotalFinishSize); ClearAllState(); IsAllDataDownloadFinish = true; MDebug.Log(LOG_TAG, "All AssetData has been Downloaded!"); } } else { m_CurrentDownloadCoroutine = null; m_SizeOfDownloadingData = data.Size; IsAllDataDownloadFinish = false; m_RoutineAssetFinishCallBack?.Invoke(false, TotalFinishCount, TotalFinishSize); m_IsDownloading = true; MDebug.LogError(LOG_TAG, $"DownloadData file stop! FileName:{data.FileName} Reason:{request.error}"); } } }
/// <summary> /// 添加一个新的下载数据 /// </summary> /// <param name="data"></param> public void AddNewDownLoadData(TempAssetInitManager.DownloadDataEntity data) { m_DownLoadDataQueue.Enqueue(data); TotalDownloadCount++; TotalDownloadSize += data.Size; }