private void FetchPatchInfo() { var patchInfoUrl = $"{_remoteRoot}/patch_info_{curVerStr}.json?{DateTime.Now.Ticks}"; WebRequestMgr.Get(patchInfoUrl, (request) => { var str = request.downloadHandler.text; Debug.Log("patch_info:\n" + str); var patchInfo = JsonMapper.ToObject <PatchInfo>(str); if (patchInfo != null) { //最新版本资源无需下载补丁包 if (patchInfo.version == patchInfo.nextVer) { onMsg("当前为最新版本资源,忽略更新"); UpdateResVer(null); onFinish(); } else { //开始下载补丁包 var networkType = Application.internetReachability; if (networkType == NetworkReachability.ReachableViaLocalAreaNetwork) { //WIFI直接下载 _DownloadRes(patchInfo); } else { if (onMsgBox != null) { onMsgBox("正在使用非WiFi网络,\n下载补丁包将产生流量费用\n是否继续?", "下载", () => { _DownloadRes(patchInfo); }); } else { _DownloadRes(patchInfo); } } } } else { OnPatchInfoError(null); } }, OnPatchInfoError, null); }
private void _DownloadRes(PatchInfo patchInfo) { var patchZipUrl = $"{this._remoteRoot}/{patchInfo.fileName}?{DateTime.Now.Ticks}"; var savePath = ResManager.DocumentDirPath + patchInfo.fileName; DownloadHandlerFileRange downloadHandler = null; WebRequestMgr.DownloadFile(patchZipUrl, savePath, (e) => { downloadHandler = e.downloadHandler as DownloadHandlerFileRange; onMsg("开始下载..."); onProgress(0f); }, (request) => { onMsg("解压补丁包..."); onProgress(0.8f); ZipTool.UncompressFile(savePath, ResManager.DocumentBundlePath); FileExt.DeleteFile(savePath); UpdateResVer(patchInfo.nextVer); needReload = true; //更新完毕再重新拉取最新patchInfo FetchPatchInfo(); }, (request) => { UpdateResVer(null); onMsg("下载补丁包失败,忽略更新"); onProgress(1f); onFinish(); }, (asyncOp) => { if (downloadHandler != null) { long totalSize = downloadHandler.FileSize; long curSize = downloadHandler.DownloadedSize; onMsg($"下载补丁包中...({curSize}/{totalSize})({downloadHandler.DownloadProgress * 100}%)"); } else { onMsg($"下载补丁包中...({asyncOp.webRequest.downloadedBytes}/{patchInfo.fileSize})"); } onProgress(asyncOp.progress * 0.8f); }); }