Пример #1
0
 private void NotifyUpdateEnd()
 {
     EventHelper.DoEvent(EventHelper.EVENT_UPDATE_END, this);
 }
Пример #2
0
 // 出现大版本更新,点击跳转到更新页面
 private void OnStoreUpdateCallback()
 {
     EventHelper.DoEvent(EventHelper.URL_STORE_UPDATE, this);
 }
Пример #3
0
        private IEnumerator HotUpdate()
        {
            // 0.读取更新配置信息
            yield return(StartCoroutine(LoadUpdateConfig(GameConfig.PERSISTENT_URL + "media/update.json")));

            if (_updateConfig == null)
            {
                yield return(StartCoroutine(LoadUpdateConfig(GameConfig.DATA_URL + "media/update.json")));

                if (_updateConfig == null)
                {
                    // 读取失败直接关闭游戏
                    Debug.LogError("Invalid update config. Application halt!");
                    Application.Quit();

                    yield break;
                }
            }

            SetProgressInfo(0, GetText(MESSAGE_CHECKING));

            // 1.加载本地文件索引
            yield return(StartCoroutine(AssetIndexData.Instance().Load(this)));

            GameConfig.LANG    = _updateConfig.lang;
            GameConfig.VERSION = AssetIndexData.Instance().GetVersionString();
            UpdateLogo();

            // 是否跳过更新
            if (_skipUpdate)
            {
                _updateStatus = STATUS_COMPLETE;
                yield break;
            }

            // 2.读取最新更新配置文件
            yield return(StartCoroutine(DownloadUpdateSetting()));

            if (_updateSetting == null)
            {
                // 是否跳过更新
                if (_skipUpdate)
                {
                    _updateStatus = STATUS_COMPLETE;
                    yield break;
                }

                ShowNoticeDialog(GetText(MESSAGE_NETWORK_ERROR), BUTTON_RETRY, this.OnRetryCallback);
                yield break;
            }

            int verNow  = AssetIndexData.Instance().GetVersion();
            int vStatus = _updateSetting.GetStatus(verNow, GameConfig.PLATFORM);

            GameConfig.BETA            = (vStatus == VersionStatus.STATUS_BETA);
            GameConfig.REVIEW          = (vStatus == VersionStatus.STATUS_REVIEW || vStatus == VersionStatus.STATUS_GOV);
            GameConfig.SERVER_LIST_URL = _updateSetting.svrUrl + "?s=" + vStatus.ToString() + "&p=" + GameConfig.PLATFORM;
            GameConfig.GIFT_CODE_URL   = _updateSetting.giftUrl;
            GameConfig.GAME_EVENT_URL  = _updateSetting.eventUrl;

            // 通知游戏启动
            EventHelper.DoEvent(EventHelper.EVENT_STARTUP, this);

            Debug.Log("HotUpdate: " + GameConfig.LANG + " " + GameConfig.VERSION + " " + GameConfig.PLATFORM + " BETA=" + GameConfig.BETA + " REVIEW=" + GameConfig.REVIEW);

            // 是否跳过更新
            if (_skipUpdate)
            {
                _updateStatus = STATUS_COMPLETE;
                NotifyUpdateEnd();
                yield break;
            }

            // 3.检查最新版本号
            int verLatest = _updateSetting.GetLastVersion(verNow, GameConfig.PLATFORM);

            if (verLatest == 0)
            {
                // 找不到可更新的版本,跳过更新
                _updateStatus = STATUS_COMPLETE;
                NotifyUpdateEnd();
                yield break;
            }
            _latestVersion = VersionHelper.CodeToString(verLatest);

            // 4.下载最新的文件索引
            yield return(StartCoroutine(DownloadLatestIndex()));

            if (_latest == null)
            {
                ShowNoticeDialog(GetText(MESSAGE_NETWORK_ERROR), BUTTON_RETRY, this.OnRetryCallback);
                yield break;
            }

            // 5.比较文件数据生成下载列表
            if (!CheckDiff())
            {
                // 出现大版本更新,提示重新安装最新版
                ShowNoticeDialog(GetText(MESSAGE_NOT_COMPATIBLE), BUTTON_UPDATE, this.OnStoreUpdateCallback, false);
                yield break;
            }

            // 无需更新, 直接写入最新版本号
            if (_updateList == null || _updateList.Count == 0)
            {
                AssetIndexData.Instance().GetIndex().SetVersion(_latest.GetVersion());
                AssetIndexData.Instance().Save();

                GameConfig.VERSION = AssetIndexData.Instance().GetVersionString();

                SetProgressInfo(0, GetText(MESSAGE_COMPLETE));                 // 不设置到100%,不想让玩家看到进度条在加载时又回到0闪烁
                _updateStatus = STATUS_COMPLETE;
                NotifyUpdateEnd();
                yield break;
            }

            // 如果是Wifi环境,无需弹窗确认,直接开始下载
            if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
            {
                _confirmDownload = false;
            }

            // 如果更新文件小于5M,无需弹窗确认,直接开始下载
            if (_updateSize <= 1024 * 1024 * 5)
            {
                _confirmDownload = false;
            }

            // 6.弹出更新确认框, 下载所有更新文件
            if (_confirmDownload)
            {
                ShowNoticeDialog(GetText(MESSAGE_NEW_VERSION, FormatSize(_updateSize)), BUTTON_UPDATE, this.OnDownloadCallback);
            }
            else
            {
                OnDownloadCallback();
            }
        }