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);
        }
Ejemplo n.º 2
0
    /// <summary>
    /// 点击手动下载
    /// </summary>
    public void OnManualUpdate()
    {
        AssetUpdater updater = AssetUpdater.Instance;
        AssetVerInfo verInfo = updater.svrVerInfo;

        BLogger.Assert(verInfo != null);

        ReleaseUtil.StartManualDownLoadProg(verInfo.m_progUrl);
    }
Ejemplo n.º 3
0
    /// <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));
        }
    }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
    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();
    }
Ejemplo n.º 6
0
    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();
        }
Ejemplo n.º 8
0
    /// <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);
        }
    }
Ejemplo n.º 9
0
    /// <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));
        }
    }