Example #1
0
        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;
                }
            }
        }
Example #2
0
        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);
                }
            }
        }