//用户点击了确定按钮 private void RealDownloadPatch() { float needSize = (m_totalUnpackSize + m_totalSize) * 1.2f; // TODO:正确的磁盘容量自己写接口取获取 long diskSize = 1073741824; Debug.LogFormat("下载补丁,磁盘容量:{0}, 需要容量:{1}", diskSize, needSize); if (diskSize < needSize) { float diff = needSize - diskSize; SetConfirmTips(string.Format("手机存储空间不足,还缺: {0},请释放手机内存后重试", CommonHelper.FormatKB(diff)), "更新", () => { RealDownloadPatch(); SetConfirmTipsPanelVisable(false); }); return; } var tips = string.Format("确定下载补丁包?数量:{0}", m_lstDiffVersions.Count); SetConfirmTips(tips, "确定", () => { ResetWorks(); if (m_lockProgress == null) { m_lockProgress = new Object(); m_lockMsg = new Object(); } m_strErrMsg = ""; m_haveDownedSize = 0; string strDownTips = "资源更新中"; strDownTips = strDownTips + "(" + CommonHelper.FormatKB(m_totalSize) + ")"; SetTipText(strDownTips); var length = m_lstDiffVersions.Count; FileHelper.Mkdir(AppConst.UpdateCachePath); for (int i = 0; i < m_lstDiffVersions.Count; i++) { ABFileInfo versionInfo = m_lstDiffVersions[i]; string strURL = m_strDownloadUrl + versionInfo.filename; string strPath = AppConst.UpdateCachePath + "/" + versionInfo.filename; Debug.Log("添加任务,下载文件到:" + strPath); AddWork(new Downloader(strURL, strPath, OnDownloadFileProgress, OnDownloadFileEnd)); } StartWork(); SetConfirmTipsPanelVisable(false); }); }
// 计算差异文件并开始下载 private void CalDiffToDownload() { SetTipText("对比差异文件中..."); m_lstDiffVersions = m_lstDiffVersions == null ? new List <ABFileInfo>() : m_lstDiffVersions; m_lstDiffVersions.Clear(); m_totalSize = 0; //先检索沙盒目录的verions文件,如果没有,证明是新包会去Resource下读取versions文件 string localVersionFilePath = AppConst.DataPath + "/" + AppConst.VersionFileName; if (File.Exists(localVersionFilePath)) { m_dicLocalVersions = FileHelper.ReadABVersionInfo(localVersionFilePath); } else { localVersionFilePath = Path.GetFileNameWithoutExtension(AppConst.VersionFileName); var textAsset = Resources.Load <TextAsset>(localVersionFilePath); m_dicLocalVersions = FileHelper.ReadABVersionFromText(textAsset.text); Resources.UnloadAsset(textAsset); } Debug.LogFormat("本地Md5文件路径:{0}", localVersionFilePath); foreach (KeyValuePair <string, ABFileInfo> pair in m_dicSvrVersions) { ABFileInfo svrInfo = pair.Value; ABFileInfo localInfo = null; m_dicLocalVersions.TryGetValue(svrInfo.filename, out localInfo); //排除和母包中md5一样的热更列表 bool isNeedDownLoad = localInfo == null || localInfo.md5 != svrInfo.md5; if (isNeedDownLoad) { // 如果有差异,先删除本地文件 if (localInfo != null) { string localFilePath = Utility.UpdatePath + localInfo.filename; FileHelper.DeleteFile(localFilePath); } string strCachePath = AppConst.UpdateCachePath + "/" + svrInfo.filename; if (!FileHelper.IsFileExist(strCachePath)) { m_totalSize += svrInfo.compressSize; m_lstDiffVersions.Add(svrInfo); } } } var tips = string.Format("需要下载的更新大小:{0}, 差异文件数量:{1}", m_totalSize, m_lstDiffVersions.Count); Debug.Log(tips); SetTipText(tips); if (m_totalSize > 0) { //wifi或者数据下载量小于设定值,直接下载 if (CommonUtil.IsWifi || m_totalSize < AppConst.AUTO_DOWNLOAD_SIZE) { RealDownloadPatch(); } else { SetConfirmTips(string.Format("是否确定使用手机流量下载[{0}KB]的游戏资源?", CommonHelper.FormatKB(m_totalSize)), "继续", () => { RealDownloadPatch(); SetConfirmTipsPanelVisable(false); }); } } else { OnProgress(1f); OnDestory(); m_onDownPatchDone(true); } }