private IEnumerator GetUpdateFileAndSave(AssetDownloadData asset) { DownloadHandlerFile downloadHandler = new DownloadHandlerFile(Path.Combine(EnvironmentVariables.ExportAssetsRoot, asset.localPath)); using (UnityWebRequest uwr1 = UnityWebRequest.Get(asset.uri1)) { uwr1.certificateHandler = new UpdateCertificateHandler(); uwr1.downloadHandler = downloadHandler; uwr1.SendWebRequest(); while (!uwr1.isDone) { asset.progress = uwr1.downloadProgress; yield return(new WaitForEndOfFrame()); } if (uwr1.isNetworkError) { ErrorList.Add(asset); yield break; } else if (uwr1.isHttpError) { using (UnityWebRequest uwr2 = UnityWebRequest.Get(asset.uri2)) { uwr2.certificateHandler = new UpdateCertificateHandler(); uwr2.downloadHandler = downloadHandler; uwr2.SendWebRequest(); while (!uwr2.isDone) { asset.progress = uwr2.downloadProgress; yield return(new WaitForEndOfFrame()); } if (uwr2.isNetworkError || uwr2.isHttpError) { ErrorList.Add(asset); yield break; } } } else { asset.isSuccess = true; } } }
private void AddToDownloadList(IEnumerable <string> assetKeys) { foreach (var item in assetKeys) { // update catalog 中的MD5值 string assetRemoteMD5 = (string)UpdateSharedData.Instance.RemoteCatalog["assets"][item]["md5"]; // current catalog 中的MD5值 string assetLocalMD5 = UpdateSharedData.Instance.LocalCatalog["assets"].Keys.Contains(item) ? (string)UpdateSharedData.Instance.LocalCatalog["assets"][item]["md5"] : null; // 添加进更新数组中的文件,1个条件: // 1.本地文件的MD5值与update catalog列表中不同。因为MD5相同的话,可能的情况是该文件已经下载但是整个更新流程并未完成。因此不用重复下载 // 取消ver比较的原因在于,可能出现某个在中间某个版本删除,然后原文件又被加回来的情况。这样就会导致ver号升高但是MD5不变,等同于下载完成但是更新未完成,因此ver号失去校验意义 string fileAbsPath = Path.Combine(EnvironmentVariables.ExportAssetsRoot, item); if (assetRemoteMD5.Equals(assetLocalMD5)) // 不需要更新 { continue; } else if ((File.Exists(fileAbsPath) && // 文件存在 UpdateUtils.MD5Hash(File.OpenRead(fileAbsPath)).Equals(assetRemoteMD5))) //已下载完成 { Debug.Log("the asset has been downloaded@" + fileAbsPath); continue; } else { AssetDownloadData data = new AssetDownloadData(); data.localPath = item; Uri result; if (Uri.TryCreate(new Uri((string)UpdateSharedData.Instance.RemoteVersion["cdn1"]), item, out result)) { data.uri1 = result.ToString(); } if (Uri.TryCreate(new Uri((string)UpdateSharedData.Instance.RemoteVersion["cdn2"]), item, out result)) { data.uri2 = result.ToString(); } data.size = ((int)UpdateSharedData.Instance.RemoteCatalog["assets"][item]["size"]); RequiredDownloadSize += ((int)UpdateSharedData.Instance.RemoteCatalog["assets"][item]["size"]); UpdateSharedData.Instance.DownloadList.Add(data); } } }