Example #1
0
        public void UpdateUI(UpdateParam param)
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                if (param == UpdateParam.InstallStart)
                {
                    ((MainWindow)Application.Current.MainWindow).NextBtn.IsEnabled = false;
                    ((MainWindow)Application.Current.MainWindow).BackBtn.IsEnabled = false;
                    ((MainWindow)Application.Current.MainWindow).MainFrame.Navigate(this.InstallationProgressPage);
                }
                else if (param == UpdateParam.ExtractionComplete)
                {
                    ((MainWindow)Application.Current.MainWindow).CancelBtn.Content  = "Finish";
                    ((MainWindow)Application.Current.MainWindow).NextBtn.Visibility = Visibility.Hidden;
                    ((MainWindow)Application.Current.MainWindow).BackBtn.Visibility = Visibility.Hidden;

                    this.InstallationProgressPage.progressBar.IsIndeterminate = false;
                    this.InstallationProgressPage.InstallPanel.Visibility     = Visibility.Collapsed;
                }
                else if (param == UpdateParam.InstallComplete)
                {
                    ((MainWindow)Application.Current.MainWindow).FinishBtn.Visibility = Visibility.Visible;
                    ((MainWindow)Application.Current.MainWindow).FinishBtn.Click     += Install_Finish;
                    ((MainWindow)Application.Current.MainWindow).CancelBtn.Visibility = Visibility.Hidden;
                }
                else if (param == UpdateParam.ProgressIndeterminate)
                {
                    this.InstallationProgressPage.progressBar.IsIndeterminate = true;
                }
            });
        }
        public void UpdateUI(UpdateParam param)
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                if (param == UpdateParam.InstallStart)
                {
                    ((MainWindow)Application.Current.MainWindow).Closed += OnWindowClosed;
                    if (Silent)
                    {
                        ((MainWindow)Application.Current.MainWindow).Show();
                        ProgressPage.launchOnExitCheckbox.IsEnabled  = false;
                        ProgressPage.launchOnExitCheckbox.Visibility = Visibility.Hidden;
                    }
                    ((MainWindow)Application.Current.MainWindow).NextBtn.IsEnabled = false;
                    ((MainWindow)Application.Current.MainWindow).BackBtn.IsEnabled = false;
                    ((MainWindow)Application.Current.MainWindow).MainFrame.Navigate(this.ProgressPage);
                    UpdateProgressBar(GetResourceString("Installer_ProgressBar_Initalizing"), 0, 0, true);
                }
                else if (param == UpdateParam.InstallComplete)
                {
                    ((MainWindow)Application.Current.MainWindow).Closed -= OnWindowClosed;
                    if (Silent)
                    {
                        ((MainWindow)Application.Current.MainWindow).Hide();
                    }
                    else
                    {
                        ((MainWindow)Application.Current.MainWindow).CancelBtn.Content    = "Finish";
                        ((MainWindow)Application.Current.MainWindow).NextBtn.Visibility   = Visibility.Hidden;
                        ((MainWindow)Application.Current.MainWindow).BackBtn.Visibility   = Visibility.Hidden;
                        ((MainWindow)Application.Current.MainWindow).CancelBtn.Visibility = Visibility.Hidden;
                        ((MainWindow)Application.Current.MainWindow).FinishBtn.Visibility = Visibility.Visible;
                        ((MainWindow)Application.Current.MainWindow).FinishBtn.Click     += (sender, e) => Install_Finish();

                        this.ProgressPage.InstallPanel.Visibility = Visibility.Collapsed;
                        UpdateProgressBar(GetResourceString("Installer_ProgressBar_Finalizing"), 0, 0, false);
                    }
                }
            });
        }
Example #3
0
File: Bean.cs Project: e2wugui/zeze
        public bool Update(GridData grid, GridData.Row row, ref int colIndex, int pathIndex, UpdateParam param)
        {
            // ColumnCount maybe change in loop
            for (; colIndex < grid.ColumnCount; ++colIndex)
            {
                ColumnTag tag = grid.GetColumn(colIndex).ColumnTag;
                switch (tag.Tag)
                {
                case ColumnTag.ETag.AddVariable:
                    // end of bean.
                    // 删除Define变化时没有同步的数据。
                    HashSet <string> removed = new HashSet <string>();
                    foreach (var k in VariableMap.Keys)
                    {
                        if (tag.PathLast.Define.Parent.GetVariable(k) == null)
                        {
                            removed.Add(k);
                        }
                    }
                    foreach (var k in removed)
                    {
                        DeleteVarData(k);
                    }
                    return(false);
                }
                ColumnTag.VarInfo varInfo = tag.Path[pathIndex];
                if (false == VariableMap.TryGetValue(varInfo.Define.Name, out var varData))
                {
                    switch (param.UpdateType)
                    {
                    case EUpdate.Data:
                        break;     // will new data

                    case EUpdate.CallAction:
                    case EUpdate.Grid:
                        if (varInfo.Define.Type == VarDefine.EType.List)
                        {
                            if (tag.Tag == ColumnTag.ETag.ListStart)
                            {
                                ++colIndex;
                            }
                            colIndex = GridData.FindColumnListEnd(grid, colIndex);
                        }
                        continue;     // data not found. continue load.

                    case EUpdate.DeleteData:
                        return(true);    // data not found. nothing need to delete.

                    default:
                        throw new Exception("unknown update type");
                    }
                    varData = new VarData(this, varInfo.Define.Name);
                    VariableMap.Add(varInfo.Define.Name, varData);
                }
                else if (param.UpdateType == EUpdate.CallAction)
                {
                    param.UpdateAction(grid, colIndex, varInfo, varData);
                }

                if (varInfo.Define.Type == VarDefine.EType.List)
                {
                    if (param.UpdateType == EUpdate.DeleteData)
                    {
                        if (pathIndex + 1 < tag.Path.Count)
                        {
                            if (varInfo.ListIndex < varData.Beans.Count)
                            {
                                Bean bean1 = varData.Beans[varInfo.ListIndex];
                                if (null != bean1)
                                {
                                    bean1.Update(grid, row, ref colIndex, pathIndex + 1, param);
                                }
                                // always return true;
                            }
                        }
                        else
                        {
                            if (ColumnTag.ETag.ListStart != tag.Tag)
                            {
                                throw new Exception("应该仅在Tag为ListStart时移除数据. see FormMain.deleteVariable...");
                            }
                            DeleteVarData(varInfo.Define.Name);
                        }
                        return(true);
                    }
                    if (ColumnTag.ETag.ListStart == tag.Tag)
                    {
                        continue; // 此时没有进入下一级Bean,就在当前Bean再次判断,因为这里没有ListIndex。
                    }
                    if (tag.Tag == ColumnTag.ETag.ListEnd)
                    {
                        int curListCount = -varInfo.ListIndex;
                        int add          = 0;
                        for (int i = curListCount; i < varData.Beans.Count; ++i)
                        {
                            ColumnTag tagSeed = tag.Copy(ColumnTag.ETag.Normal);
                            tagSeed.PathLast.ListIndex = i;
                            add += tag.PathLast.Define.Reference.BuildGridColumns(grid, colIndex + add, tagSeed, -1);
                        }
                        if (curListCount < varData.Beans.Count) // curListCount 至少为1.
                        {
                            varInfo.ListIndex = -varData.Beans.Count;
                        }
                        if (add > 0)
                        {
                            --colIndex; // 新增加了列,回退一列,继续装载数据。
                        }
                        continue;
                    }

                    if (varInfo.ListIndex >= varData.Beans.Count)
                    {
                        if (EUpdate.Data == param.UpdateType)
                        {
                            for (int i = varData.Beans.Count; i < varInfo.ListIndex; ++i)
                            {
                                varData.AddBean(new Bean(Document, varInfo.Define.Value));
                            }
                            Bean create = new Bean(Document, varInfo.Define.Value);
                            varData.AddBean(create);
                            if (create.Update(grid, row, ref colIndex, pathIndex + 1, param))
                            {
                                return(true);
                            }
                        }
                        // 忽略剩下的没有数据的item直到ListEnd。
                        colIndex = GridData.FindColumnListEnd(grid, colIndex);
                        continue;
                    }

                    Bean bean = varData.Beans[varInfo.ListIndex];
                    if (null != bean)
                    {
                        if (bean.Update(grid, row, ref colIndex, pathIndex + 1, param))
                        {
                            return(true);
                        }
                        continue;
                    }
                    if (EUpdate.Data == param.UpdateType)
                    {
                        Bean create = new Bean(Document, varInfo.Define.Value);
                        varData.SetBeanAt(varInfo.ListIndex, create);
                        if (create.Update(grid, row, ref colIndex, pathIndex + 1, param))
                        {
                            return(true);
                        }
                    }
                    continue;
                }

                if (pathIndex + 1 != tag.Path.Count)
                {
                    throw new Exception("Remain Path, But Is Not A List");
                }

                switch (param.UpdateType)
                {
                case EUpdate.Data:
                    // OnGridCellEndEdit update data
                    varData.Value = row.Cells[colIndex].Value;
                    return(true);

                case EUpdate.CallAction:
                    // 上面已经做完了。
                    break;

                case EUpdate.Grid:
                    row.Cells[colIndex].Value = varData.Value; // upate to grid
                    break;                                     // Update Grid 等到 ColumnTag.ETag.AddVariable 才返回。在这个函数开头。

                case EUpdate.DeleteData:
                    DeleteVarData(varInfo.Define.Name);
                    return(true);

                default:
                    throw new Exception("unkown update type. end.");
                }
            }
            return(true);
        }
Example #4
0
        private async Task UpdateSpiders()
        {
            try
            {
                XReg.SetParameter(TASK_START, CustomAnchor.TimeKey);
                XReg.Save();

                IEnumerable <XParameter> Updates;
                List <string>            Exists = new List <string>();

                if (Retrying)
                {
                    Updates = XReg.Parameters(AppKeys.BTASK_SPIDER).Where(x =>
                    {
                        int r = x.GetSaveInt(AppKeys.BTASK_RETRY);
                        return(0 < r && r < MaxRetry);
                    });
                }
                else
                {
                    Updates = XReg.Parameters(AppKeys.BTASK_SPIDER).Where(x => {
                        int r = x.GetSaveInt(AppKeys.BTASK_RETRY);
                        if (r == 0 || MaxRetry <= r)
                        {
                            return(true);
                        }
                        else
                        {
                            // Consider Retry Timer dead if LastUpdate is 20 < minutes
                            DateTime LastRun = DateTime.FromFileTimeUtc(x.GetSaveLong(AppKeys.LBS_TIME));
                            return(30 < DateTime.Now.Subtract(LastRun).TotalMinutes);
                        }
                    });
                }

                foreach (XParameter UpdateParam in Updates)
                {
                    string TileId = UpdateParam.GetValue("tileId");

                    if (!SecondaryTile.Exists(TileId))
                    {
                        UpdateParam.SetValue(new XKey[] {
                            new XKey(AppKeys.SYS_EXCEPTION, "App Tile is missing")
                            , CustomAnchor.TimeKey
                        });
                        XReg.SetParameter(UpdateParam);
                        continue;
                    }

                    string[] Keys = UpdateParam.Id.Split('.');

                    if (Keys.Length != 3)
                    {
                        XReg.RemoveParameter(UpdateParam.Id);
                        continue;
                    }

                    SpiderBook SBook = await SpiderBook.CreateSAsync(Keys[0], Keys[2], null);

                    if (!SBook.CanProcess)
                    {
                        XReg.RemoveParameter(UpdateParam.Id);
                        continue;
                    }

                    SBook.MarkUnprocessed();

                    string OHash = null, NHash = null;
                    SBook.GetBook()?.Entry.Meta.TryGetValue("TOCHash", out OHash);

                    await ItemProcessor.ProcessLocal(SBook);

                    if (SBook.ProcessSuccess)
                    {
                        BookInstruction NBook = SBook.GetBook();
                        NBook?.Entry.Meta.TryGetValue("TOCHash", out NHash);

                        if (NBook.Packed == true && (NBook.NeedUpdate || OHash != NHash))
                        {
                            await LiveTileService.UpdateTile(CanvasDevice, NBook, TileId);
                        }

                        UpdateParam.SetValue(new XKey[] {
                            new XKey(AppKeys.SYS_EXCEPTION, false)
                            , new XKey(AppKeys.BTASK_RETRY, 0)
                            , CustomAnchor.TimeKey
                        });
                    }
                    else
                    {
                        CreateRetryTimer();

                        int NRetries = UpdateParam.GetSaveInt(AppKeys.BTASK_RETRY);
                        UpdateParam.SetValue(new XKey[]
                        {
                            new XKey(AppKeys.SYS_EXCEPTION, true)
                            , new XKey(AppKeys.BTASK_RETRY, NRetries + 1)
                            , CustomAnchor.TimeKey
                        });
                    }

                    XReg.SetParameter(UpdateParam);
                    XReg.Save();
                }

                XReg.SetParameter(TASK_END, CustomAnchor.TimeKey);
                XReg.Save();
            }
            catch (Exception ex)
            {
                try
                {
                    XReg.SetParameter(AppKeys.SYS_EXCEPTION, new XKey(AppKeys.SYS_MESSAGE, ex.Message));
                    XReg.Save();
                }
                catch (Exception) { }
            }
        }
    public bool UpdateMarker(UpdateParam param)
    {
        //IL_01b3: Unknown result type (might be due to invalid IL or missing references)
        //IL_01ba: Expected O, but got Unknown
        //IL_0342: Unknown result type (might be due to invalid IL or missing references)
        //IL_0352: Unknown result type (might be due to invalid IL or missing references)
        //IL_0413: Unknown result type (might be due to invalid IL or missing references)
        //IL_041a: Expected O, but got Unknown
        //IL_0462: Unknown result type (might be due to invalid IL or missing references)
        //IL_0472: Unknown result type (might be due to invalid IL or missing references)
        //IL_0482: Unknown result type (might be due to invalid IL or missing references)
        //IL_048d: Unknown result type (might be due to invalid IL or missing references)
        //IL_04b9: Unknown result type (might be due to invalid IL or missing references)
        //IL_04c9: Unknown result type (might be due to invalid IL or missing references)
        //IL_04d9: Unknown result type (might be due to invalid IL or missing references)
        //IL_04e4: Unknown result type (might be due to invalid IL or missing references)
        if (param == null)
        {
            return(false);
        }
        bool        result      = false;
        EFFECT_TYPE eFFECT_TYPE = EFFECT_TYPE.NONE;

        switch (param.weakState)
        {
        case Enemy.WEAK_STATE.WEAK:
            eFFECT_TYPE = EFFECT_TYPE.WEAK;
            break;

        case Enemy.WEAK_STATE.DOWN:
            eFFECT_TYPE = EFFECT_TYPE.DOWN;
            break;

        case Enemy.WEAK_STATE.WEAK_SP_ATTACK:
        case Enemy.WEAK_STATE.WEAK_SP_DOWN_MAX:
            eFFECT_TYPE = (EFFECT_TYPE)((!param.isAimMode || !param.targeting || param.weakSubParam == 5) ? (7 + param.weakSubParam - 1) : 0);
            break;

        case Enemy.WEAK_STATE.WEAK_ELEMENT_ATTACK:
            eFFECT_TYPE = EFFECT_TYPE.WEAK_ELEMENT_ATTACK;
            break;

        case Enemy.WEAK_STATE.WEAK_ELEMENT_SKILL_ATTACK:
            eFFECT_TYPE = EFFECT_TYPE.WEAK_ELEMENT_SKILL_ATTACK;
            break;

        case Enemy.WEAK_STATE.WEAK_SKILL_ATTACK:
            eFFECT_TYPE = EFFECT_TYPE.WEAK_SKILL_ATTACK;
            break;

        case Enemy.WEAK_STATE.WEAK_HEAL_ATTACK:
            eFFECT_TYPE = EFFECT_TYPE.WEAK_HEAL_ATTACK;
            break;

        case Enemy.WEAK_STATE.WEAK_CANNON:
            eFFECT_TYPE = EFFECT_TYPE.WEAK_CANNON;
            break;

        default:
            if (param.targeting)
            {
                eFFECT_TYPE = EFFECT_TYPE.NORMAL;
            }
            break;
        }
        if (param.isAimMode && (eFFECT_TYPE == EFFECT_TYPE.NONE || eFFECT_TYPE == EFFECT_TYPE.NORMAL))
        {
            switch (param.spAttackType)
            {
            case SP_ATTACK_TYPE.HEAT:
                eFFECT_TYPE = ((!param.isAimChargeMax) ? EFFECT_TYPE.AIM_HEAT : EFFECT_TYPE.AIM_HEAT_CHARGE_MAX);
                break;

            default:
                eFFECT_TYPE = ((!param.isAimChargeMax) ? EFFECT_TYPE.AIM : EFFECT_TYPE.AIM_CHARGE_MAX);
                break;

            case SP_ATTACK_TYPE.SOUL:
                break;
            }
        }
        bool flag = false;

        if (param.isAimArrow && param.spAttackType == SP_ATTACK_TYPE.SOUL)
        {
            if (eFFECT_TYPE != EFFECT_TYPE.WEAK && eFFECT_TYPE != EFFECT_TYPE.WEAK_SP_ARROW)
            {
                eFFECT_TYPE = EFFECT_TYPE.NONE;
            }
            flag = true;
        }
        if (effectType != eFFECT_TYPE || point != param.targetPoint || !param.targetPoint.param.isShowRange)
        {
            if (effectTransform != null)
            {
                EffectManager.ReleaseEffect(effectTransform.get_gameObject(), true, false);
            }
            effectTransform = null;
        }
        if (effectTransform == null && eFFECT_TYPE != EFFECT_TYPE.NONE && param.targetPoint.param.isShowRange)
        {
            string      text         = MonoBehaviourSingleton <InGameSettingsManager> .I.targetMarkerSettings.effectNames[(int)eFFECT_TYPE];
            EFFECT_TYPE eFFECT_TYPE2 = eFFECT_TYPE;
            if (eFFECT_TYPE2 == EFFECT_TYPE.WEAK_ELEMENT_ATTACK || eFFECT_TYPE2 == EFFECT_TYPE.WEAK_ELEMENT_SKILL_ATTACK)
            {
                text = ((param.validElementType >= 0) ? (text + param.validElementType.ToString()) : string.Empty);
            }
            if (!string.IsNullOrEmpty(text))
            {
                effectTransform = EffectManager.GetEffect(text, transform);
            }
            result = true;
        }
        if (param.playSign && param.targetPoint.param.isShowRange)
        {
            EFFECT_TYPE eFFECT_TYPE3 = EFFECT_TYPE.NONE;
            switch (param.weakState)
            {
            case Enemy.WEAK_STATE.WEAK:
                eFFECT_TYPE3 = EFFECT_TYPE.WEAK_SIGN;
                break;

            case Enemy.WEAK_STATE.DOWN:
                eFFECT_TYPE3 = EFFECT_TYPE.DOWN_SIGN;
                break;

            case Enemy.WEAK_STATE.WEAK_SP_ATTACK:
            case Enemy.WEAK_STATE.WEAK_SP_DOWN_MAX:
                eFFECT_TYPE3 = (EFFECT_TYPE)(12 + param.weakSubParam - 1);
                break;
            }
            if (eFFECT_TYPE3 != EFFECT_TYPE.NONE)
            {
                string text2 = MonoBehaviourSingleton <InGameSettingsManager> .I.targetMarkerSettings.effectNames[(int)eFFECT_TYPE3];
                if (!string.IsNullOrEmpty(text2))
                {
                    Transform effect = EffectManager.GetEffect(text2, transform);
                    if (effect != null)
                    {
                        effect.Set(param.targetPoint.param.markerPos, param.targetPoint.param.markerRot);
                    }
                    result = true;
                }
            }
        }
        if (flag && param.targetPoint.param.isShowRange)
        {
            if (!param.isMultiLockMax && multiLockTransform == null)
            {
                string text3 = MonoBehaviourSingleton <InGameSettingsManager> .I.targetMarkerSettings.effectNames[24];
                if (!text3.IsNullOrWhiteSpace())
                {
                    multiLockTransform = EffectManager.GetEffect(text3, transform);
                    multiLock          = multiLockTransform.GetComponentInChildren <MultiLockMarker>();
                    if (multiLock != null)
                    {
                        multiLock.Init();
                    }
                    result = true;
                }
            }
        }
        else
        {
            if (multiLockTransform != null)
            {
                EffectManager.ReleaseEffect(multiLockTransform.get_gameObject(), true, false);
            }
            multiLockTransform = null;
            multiLock          = null;
        }
        effectType = eFFECT_TYPE;
        point      = param.targetPoint;
        if (effectTransform != null)
        {
            effectTransform.Set(point.param.markerPos, point.param.markerRot);
            effectTransform.set_localScale(Vector3.get_one() * param.markerScale);
        }
        if (multiLockTransform != null)
        {
            multiLockTransform.Set(point.param.markerPos, point.param.markerRot);
            multiLockTransform.set_localScale(Vector3.get_one() * param.markerScale);
        }
        return(result);
    }