/// <summary> /// 下载版本文件列表 /// </summary> private void DownloadVersionFile() { allDownloadSize = 0; currentState = HotFix_ProjectState.DownloadVersionFile; var versionListServerFile = GPath.PersistentAssetsPath + serverVersion.ToString() + ".txt"; if (File.Exists(versionListServerFile)) { File.Delete(versionListServerFile); } var versionListUnit = new DownloadUnit() { Name = serverVersion.ToString() + ".txt", SavePath = versionListServerFile, DownUrl = GPath.CDNUrl + serverVersion.ToString() + ".txt", }; versionListUnit.ErrorFun = (DownloadUnit downUnit, string msg) => { Debug.LogWarning("CompareVersion Download Error " + msg + "\n" + downUnit.DownUrl); downloadMgr.DeleteDownload(versionListUnit); UpdateError(); }; versionListUnit.CompleteFun = (DownloadUnit downUnit) => { if (!File.Exists(versionListServerFile)) // 文件不存在,重新下载 { UpdateError(); return; } fileVersionMgr.InitVersionFile(versionListServerFile); var updateList = fileVersionMgr.FindUpdateFiles(clientVersion.Version); allDownloadSize = fileVersionMgr.DownloadSize; Debug.Log("版本文件数量:" + updateList.Count); if (updateList.Count > 0) { StartDownloadList(updateList); } else { SaveVersion(); } }; downloadMgr.DownloadAsync(versionListUnit); Debug.Log("版本文件url:" + versionListUnit.DownUrl); }
private void SaveVersion() { currentState = HotFix_ProjectState.SaveVersion; clientVersion.Version = serverVersion.Version + 1; string versionPath = GPath.PersistentAssetsPath + GPath.VersionFileName; File.WriteAllText(versionPath, clientVersion.Version.ToString()); }
/// <summary> /// 读取本地版本号 /// </summary> private void ReadLocalVersion() { currentState = HotFix_ProjectState.ReadLocalVersion; var versionPath = GPath.PersistentAssetsPath + GPath.VersionFileName; int version; if (File.Exists(versionPath)) { version = int.Parse(File.ReadAllText(versionPath)); } else { version = int.Parse(Resources.Load <TextAsset>(GPath.VersionFileName).text); } clientVersion.Version = version; }
public void Finished() { currentState = HotFix_ProjectState.Finished; HotFixCallback(HotFix_ProjectState.Finished, "", null); }
/// <summary> /// 下载版本资源 /// </summary> /// <param name="updateList"></param> private void StartDownloadList(List <FileVersionData> updateList) { currentState = HotFix_ProjectState.CompareAssetVersion; var saveRootPath = GPath.StreamingAssetsPath; var urlRootPath = GPath.CDNUrl; var downloadList = new List <DownloadUnit>(); var downloadSizeList = new Dictionary <string, int>(); int downloadCount = updateList.Count; int downloadMaxCount = downloadCount; curDownloadArray = new int[downloadCount]; int existAllSize = 0; int totalAllSize = 0; int downloadedFileSizes = 0; int downloadAllFileSize = 0; foreach (var fileData in updateList) { var savePath = saveRootPath + fileData.Name; if (File.Exists(savePath)) { FileInfo fi = new FileInfo(savePath); if (fileData.Size == (int)fi.Length) { //长度相等,可能是已经下载的 //downloadNameList.Add(fileData.Name, fileData.Name); //existAllName += fileData.Name; } else // 长度不相等,需要重新下载 { //Utils.Log("StartDownloadList Delete fileData.Size="+ fileData.Size + " fi.Length="+ fi.Length); fi.Delete(); downloadSizeList.Add(fileData.Name, 0); totalAllSize += fileData.Size; } } else { downloadSizeList.Add(fileData.Name, 0); totalAllSize += fileData.Size; } var downloadUnit = new DownloadUnit() { Name = fileData.Name, DownUrl = urlRootPath + fileData.Version + "/Assets/" + fileData.Name, SavePath = savePath, Size = fileData.Size, Md5 = fileData.Md5, }; downloadUnit.ErrorFun = (DownloadUnit downUnit, string msg) => { string errorMgs = "StartDownloadList Error " + downUnit.DownUrl + " " + msg + "\n"; Debug.LogWarning(errorMgs); }; downloadUnit.ProgressFun = (DownloadUnit downUnit, int curSize, int allSize) => { curDownloadArray[downloadMaxCount - downloadCount] = curSize; if (downloadSizeList.ContainsKey(downUnit.Name)) { downloadedFileSizes += curSize - downloadSizeList[downUnit.Name]; downloadSizeList[downUnit.Name] = curSize; } else { Debug.LogError("downUnit 不存在 = " + downUnit.Name); } UpdateProgress?.Invoke(DownloadProgress); //Debug.LogFormat("正在下载资源:{0},已下载大小:{1},总大小:{2}", downUnit.Name, curSize, allSize); }; downloadUnit.CompleteFun = (DownloadUnit downUnit) => { downloadCount--; int percent = (downloadMaxCount - downloadCount) * 10 / downloadMaxCount; if (downloadCount == 0) // 下载完成 { SaveVersion(); HotFixCallback(HotFix_ProjectState.Finished, "下载完成", null); } }; downloadList.Add(downloadUnit); } downloadedFileSizes = 0; downloadAllFileSize = totalAllSize; //如果文件都存在,用已下载的作为长度,概率极低,为了表现进度特殊处理 if (totalAllSize == 0) { downloadedFileSizes = 1; downloadAllFileSize = 1; } Debug.Log("下载文件总大小:" + totalAllSize); Action downloadFun = () => { currentState = HotFix_ProjectState.DownloadFiles; foreach (var downUnit in downloadList) { downloadMgr.DownloadAsync(downUnit); } }; if (totalAllSize < 1024 * 1024) //<1MB { downloadFun(); } else { HotFixCallback(HotFix_ProjectState.RequestDownloadFiles, "游戏需要更新部分资源(" + (totalAllSize / 1024 / 1024) + "M),建议您在无线局域网环境下更新", (run) => { if (run == true) { downloadFun(); } }); } }
/// <summary> /// 读取服务端版本号 /// </summary> public void CheckCDNVersion() { downloadMgr.ClearAllDownloads(); currentState = HotFix_ProjectState.CheckCDNVersion; string versionServerFile = GPath.PersistentAssetsPath + "versionServer.txt"; if (File.Exists(versionServerFile)) { File.Delete(versionServerFile); } var versionUnit = new DownloadUnit() { Name = "version.txt", DownUrl = GPath.CDNUrl + GPath.VersionFileName, SavePath = versionServerFile }; versionUnit.ErrorFun = (DownloadUnit downUnit, string msg) => { Debug.LogWarning("CheckAssetVersion Download Error " + msg + "\n" + downUnit.DownUrl); downloadMgr.DeleteDownload(versionUnit); UpdateError(); }; versionUnit.CompleteFun = (DownloadUnit downUnit) => { if (!File.Exists(versionServerFile)) // 文件不存在,重新下载 { UpdateError(); return; } string versionStr = File.ReadAllText(versionServerFile); if (!int.TryParse(versionStr, out int curVersion)) { Debug.LogError("CheckAssetVersion version Error " + versionStr); UpdateError(); return; } serverVersion.Version = curVersion; Debug.Log("本地版本:" + clientVersion + " 服务器版本:" + curVersion); if (serverVersion.MidVer < clientVersion.MidVer) { UpdateError(); } else if (serverVersion.MidVer > clientVersion.MidVer) // 换包 { HotFixCallback(HotFix_ProjectState.RequestErrorRestart, "", (run) => { }); } else if (serverVersion.MinVer < clientVersion.MinVer) { Finished(); } else { DownloadVersionFile(); } }; downloadMgr.DownloadAsync(versionUnit); }