public AssetVerInfo ParseVerInfo(Dictionary <string, object> verJson) { AssetVerInfo newInfo = new AssetVerInfo(); newInfo.m_name = ReadJsonKey <string>(verJson, "name"); ///verJson["name"] as string; newInfo.m_assetUrl = ReadJsonKey <string>(verJson, "asseturl"); //verJson["asseturl"] as string; newInfo.m_version = ReadJsonKey <string>(verJson, "version"); //verJson["version"] as string; newInfo.m_updateType = (AssetUpdateType)ReadJsonKey <Int64>(verJson, "update"); //(AssetUpdateType)((int)verJson["update"]); // if (verJson.ContainsKey("review")) // { // AssetVersionMgr.Instance.ReviewStatus = ReadJsonKey<Int64>(verJson, "review") == 1; // } if (newInfo.m_updateType == AssetUpdateType.UPDATE_PROGRAME) { newInfo.m_err = ReadJsonKey <string>(verJson, "err"); //标题 newInfo.m_progSize = (int)ReadJsonKey <Int64>(verJson, "prog_size"); //安装包大小 newInfo.m_progUrl = ReadJsonKey <string>(verJson, "prog_url"); //下载路径 newInfo.m_help = ReadJsonKey <string>(verJson, "prog_help"); //帮助页面路径 } if (newInfo.m_updateType == AssetUpdateType.UPDATE_ERROR) { newInfo.m_err = ReadJsonKey <string>(verJson, "err"); //错误信息 } return(newInfo); }
/// <summary> /// 点击手动下载 /// </summary> public void OnManualUpdate() { AssetUpdater updater = AssetUpdater.Instance; AssetVerInfo verInfo = updater.svrVerInfo; BLogger.Assert(verInfo != null); ReleaseUtil.StartManualDownLoadProg(verInfo.m_progUrl); }
/// <summary> /// 更新点击确定 /// </summary> private void OnUpdateConfirmOK() { AssetUpdater updater = AssetUpdater.Instance; AssetVerInfo verInfo = updater.svrVerInfo; BLogger.Assert(verInfo != null); SDKCallback.OnUpgrade(); if (verInfo.m_updateType == AssetUpdateType.UPDATE_ASSET || verInfo.m_updateType == AssetUpdateType.UPDATE_REPAIR_CLIENT) { StartCoroutine(ContinueDownloadAb(verInfo)); } else { StartCoroutine(ContinueDownloadProg(verInfo)); } }
IEnumerator CrtUpdateFromRepairClient() { AssetUpdater updater = AssetUpdater.Instance; yield return(StartCoroutine(updater.CheckUpdate(true, this))); StopTickTitle(); AssetVerInfo svrVerInfo = updater.svrVerInfo; if (svrVerInfo == null) { ShowConfirm( StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_VERSION_FAILED, AssetVersionMgr.Instance.error), false, RetryUpdate); yield break; } ///读取本地 AssetVersionMgr.Instance.LoadLocalAllAssetMd5(); //获取更新的大小 StartTickTitle(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_CONTENT)); yield return(StartCoroutine(AssetVersionMgr.Instance.DownloadLatestIndex(svrVerInfo.m_assetUrl))); //yield return StartCoroutine(AssetVersionMgr.Instance); StopTickTitle(); if (AssetVersionMgr.Instance.haveErr) { ShowConfirm(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_CONTENT_FAILED, AssetVersionMgr.Instance.error), false, RetryUpdate); yield break; } ShowConfirm(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_ASSET_UPDATE_INFO, AssetVersionMgr.Instance.GetUpdateFileCount(), GetDataSize(AssetVersionMgr.Instance.GetToUpdateSize())), true, OnUpdateConfirmOK, OnUpdateConfirmCancel); }
IEnumerator ContinueDownloadAb(AssetVerInfo svrVerInfo) { var watchReport = new BTickWatcher(); EventLogReport.Instance.ReportEvent(EventLogType.event_start_update_ab); //开始更新数据包 ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_ASSET_UPDATE)); yield return(StartCoroutine(AssetVersionMgr.Instance.BeginUpdateAsset(svrVerInfo.m_assetUrl, this))); if (AssetVersionMgr.Instance.haveErr) { EventLogReport.Instance.ReportEvent(EventLogType.event_fail_update_ab, AssetVersionMgr.Instance.error); ShowConfirm(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_ASSET_UPDATE_FAILED, AssetVersionMgr.Instance.error), true, RetryUpdate); yield break; } EventLogReport.Instance.ReportEvent(EventLogType.event_end_update_ab, watchReport.ElapseTime()); //判断是否更新了脚本,如果更新了脚本,那么需要重新启动进程 if (AssetVersionMgr.Instance.scriptUpdated || XGameStartParamData.fromGrayUpdate || /*如果是灰度更新界面切过来的,那么肯定要重启*/ XGameStartParamData.fromRepairClient) { ShowConfirm(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_UPDATE_NEED_RESTART), false, DodLib.RestartApp); yield break; } //如果是资源更新了,那么重新读取本地版本信息 AssetVersionMgr.Instance.ReadBaseInfo(); StartEnterGameScene(); }
IEnumerator CrtUpdateFromGrayUpdate(AssetVerInfo verInfo) { yield return(null); if (verInfo.m_updateType == AssetUpdateType.UPDATE_ASSET) { ///读取本地 AssetVersionMgr.Instance.LoadLocalAllAssetMd5(); //获取更新的大小 StartTickTitle(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_CONTENT)); yield return(StartCoroutine(AssetVersionMgr.Instance.DownloadLatestIndex(verInfo.m_assetUrl))); yield return(StartCoroutine(AssetVersionMgr.Instance.BeginUpdateIndex(verInfo.m_assetUrl))); StopTickTitle(); StartCoroutine(ContinueDownloadAb(verInfo)); } else { StartCoroutine(ContinueDownloadProg(verInfo)); } }
public IEnumerator CheckUpdate(bool repairClient, StartupUI startUI) { m_svrVerInfo = null; //获取当前的版本 string fullUrl = DPlatform.GetCheckVersionUrl(repairClient); BLogger.Info("version check:{0}", fullUrl); WWWEx wwwEx = WWWEx.Init(15f); yield return(StartCoroutine(wwwEx.Request(fullUrl))); if (wwwEx.isTimeOut) { AssetVersionMgr.Instance.error = StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_TIMEOUT); BLogger.Warning("url reueqest timeout: {0}", fullUrl); yield break; } WWW www = wwwEx.result; if (www.error != null) { BLogger.Warning("check version update error: " + www.error); string wwwerror = www.error; www.Dispose(); AssetVersionMgr.Instance.error = StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_WWW_ERROR, wwwerror); yield break; } if (startUI != null) { startUI.ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_GAME_ETNERING)); } Dictionary <string, object> verJson = (Dictionary <string, object>)MiniJSON.Json.Deserialize(www.text); if (verJson == null || verJson.Count == 0) { BLogger.Warning("parse version json data error: {0}", www.text); AssetVersionMgr.Instance.error = StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_JSON_ERROR, 1); // DBugly.ReportException("json data error", "request error url:" + fullUrl, "parse version json data error: " + www.text); www.Dispose(); yield break; } try { m_svrVerInfo = ParseVerInfo(verJson); } catch (Exception e) { BLogger.Warning("parse ver info failed:{0}", e.ToString()); DBugly.ReportException("parse ver info", "request error url:" + fullUrl, "parse ver info failed: " + e.ToString()); AssetVersionMgr.Instance.error = StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_JSON_ERROR, 2); m_svrVerInfo = null; } www.Dispose(); }
/// <summary> /// 开始下载整包 /// </summary> /// <returns></returns> IEnumerator ContinueDownloadProg(AssetVerInfo svrVerInfo) { OnManualUpdate(); yield break; // yield return null; // //yield return null; // BLogger.Error("StartDownload prog: {0}", svrVerInfo.m_progUrl); // ReleaseUtil.StartDownLoadProg(svrVerInfo.m_progUrl); // yield return null; //如果是Ios的话,就可以直接返回了 #if !UNITY_ANDROID DodLib.DoQuit(); yield break; #endif SetProgress(0, 100); bool isDownRun = true; while (isDownRun) { ProgDownloadState stateData = ReleaseUtil.GetDownloadState(svrVerInfo.m_progUrl); if (stateData == null || stateData.status == ProgDownloadStatus.STATUS_NONE) { ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_UPDATE_FINISH)); isDownRun = false; ShowManualDownload(); break; } if (stateData.totalSize > 0) { SetProgress((uint)stateData.downloadedSize, (uint)stateData.totalSize); } switch (stateData.status) { case ProgDownloadStatus.STATUS_FAILED: { isDownRun = false; ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_DOWNLOAD_PROG_FAILED, stateData.statusReason)); ShowManualDownload(); } break; case ProgDownloadStatus.STATUS_PAUSED: { ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_DOWNLOAD_PROG_PAUSE, stateData.statusReason)); ShowManualDownload(); } break; case ProgDownloadStatus.STATUS_PENDING: { ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_DOWNLOAD_PROG_WAIT)); ShowManualDownload(); } break; case ProgDownloadStatus.STATUS_RUNNING: { if (stateData.totalSize > 0) { ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_DOWNLOAD_PROG_PROGRESS, GetDataSize(stateData.downloadedSize) + "/" + GetDataSize(stateData.totalSize))); } else { ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_DOWNLOAD_PROG_START)); } } break; case ProgDownloadStatus.STATUS_SUCCESSFUL: { isDownRun = false; ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_DOWNLOAD_PROG_SUCCESS)); #if UNITY_ANDROID //当前下载任务正在进行中 //直接调用安装 bool ret = DodLib.InstallApk(svrVerInfo.m_progUrl); BLogger.Assert(ret); #endif } break; default: break; } yield return(null); yield return(null); yield return(null); } }
/// <summary> /// 准备预处理AB资源,从jar文件挪到data目录 /// </summary> /// <returns></returns> IEnumerator GameStartup() { //m_process.gameObject.SetActive(false); AssetBundlePrepare abPrepare = AssetBundlePrepare.Instance; ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_GAME_ETNERING)); m_labelVersion.text = ""; yield return(StartCoroutine(abPrepare.CheckNeedPrepare())); ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_GAME_ETNERING)); if (BaseConfigInfo.enableObbSplitMode) { if (ObbMgr.Instance.IsNeedDownloadObb()) { SceneManager.LoadScene("Scene_obbdownload"); yield break; } } var isReportPrepareEvent = false; var watchReport = new BTickWatcher(); if (!abPrepare.IsHaveErr() && abPrepare.NeedPrepare) { EventLogReport.Instance.ReportEvent(EventLogType.event_start_unpack); isReportPrepareEvent = true; } yield return(StartCoroutine(abPrepare.StartPrepareAb(this))); if (abPrepare.IsHaveErr()) { if (isReportPrepareEvent) { EventLogReport.Instance.ReportEvent(EventLogType.event_fail_unpack, abPrepare.error); } ShowConfirm(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_PREPARE_FAILED, abPrepare.error), false, DodLib.DoQuit); yield break; } if (isReportPrepareEvent) { EventLogReport.Instance.ReportEvent(EventLogType.event_end_unpack, watchReport.ElapseTime()); } ///开始检测版本 AssetVersionMgr.Instance.ReadBaseInfo(); if (AssetVersionMgr.Instance.haveErr) { ShowConfirm( StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_ASSETVER_INIT_FAILED, AssetVersionMgr.Instance.error), false, DodLib.DoQuit); yield break; } DBugly.Init(BaseConfigInfo.PlatformName, AssetVersionMgr.Instance.assetVersion); // //统计检查版本成功还是失败 // PlatformUtil.StatisticsEventBegin("boot_update"); //获取版本号 string version = AssetVersionMgr.Instance.assetVersion; m_labelVersion.text = StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_VERSION_INFO, version); StartTickTitle(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE)); AssetUpdater updater = AssetUpdater.Instance; yield return(StartCoroutine(updater.CheckUpdate(false, this))); StopTickTitle(); AssetVerInfo svrVerInfo = updater.svrVerInfo; if (svrVerInfo == null) { // PlatformUtil.StatisticsEventFailed("boot_update", "network"); ShowConfirm( StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_VERSION_FAILED, AssetVersionMgr.Instance.error), false, RetryUpdate); yield break; } // PlatformUtil.StatisticsEventEnd("boot_update"); if (svrVerInfo.m_updateType == AssetUpdateType.UPDATE_NONE) { StartEnterGameScene(); } else if (svrVerInfo.m_updateType == AssetUpdateType.UPDATE_ASSET) { ///读取本地 AssetVersionMgr.Instance.LoadLocalAllAssetMd5(); //获取更新的大小 StartTickTitle(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_CONTENT)); yield return(StartCoroutine(AssetVersionMgr.Instance.DownloadLatestIndex(svrVerInfo.m_assetUrl))); yield return(StartCoroutine(AssetVersionMgr.Instance.BeginUpdateIndex(svrVerInfo.m_assetUrl))); StopTickTitle(); if (AssetVersionMgr.Instance.haveErr) { ShowConfirm(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_CONTENT_FAILED, AssetVersionMgr.Instance.error), false, RetryUpdate); yield break; } #if !UNITY_EDITOR if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork) { //直接下载 OnUpdateConfirmOK(); } else #endif ShowConfirm(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_ASSET_UPDATE_INFO, AssetVersionMgr.Instance.GetUpdateFileCount(), GetDataSize(AssetVersionMgr.Instance.GetToUpdateSize())), true, OnUpdateConfirmOK, OnUpdateConfirmCancel); } else if (svrVerInfo.m_updateType == AssetUpdateType.UPDATE_PROGRAME) { if (string.IsNullOrEmpty(svrVerInfo.m_help)) { ShowConfirm(svrVerInfo.m_err, true, OnUpdateConfirmOK, OnUpdateConfirmCancel); } else { ShowConfirmIos(svrVerInfo.m_err, OnUpdateConfirmOK, () => { Application.OpenURL(svrVerInfo.m_help); }); } } else if (svrVerInfo.m_updateType == AssetUpdateType.UPDATE_ERROR) { ShowText(svrVerInfo.m_err); } else { ShowText(StartupTextConfigMgr.Instance.GetText(StartupTextDefine.ID_STARTUP_CHECK_UPDATE_JSON_DETAIL, svrVerInfo.m_updateType)); } }