private void StartNode(BaseFlow flowNode)
 {
     if (flowNode != null && flowNode is IStartable startable)
     {
         startable.Start();
     }
 }
Beispiel #2
0
    private BaseFlow createNextFlow(GAME_FLOW_ENUM flow)
    {
        BaseFlow nextFlow = null;

        switch (flow)
        {
        case GAME_FLOW_ENUM.GAME_FLOW_VERIFY:
        {
            nextFlow = new VerifyFlow();
        } break;

        case GAME_FLOW_ENUM.GAME_FLOW_LOGIN:
        {
            nextFlow = new LoginFlow();
        } break;

        case GAME_FLOW_ENUM.GAME_FLOW_MAIN:
        {
            nextFlow = new MainFlow();
        } break;
        }

        if (nextFlow != null)
        {
            nextFlow.Init();
        }

        return(nextFlow);
    }
 private void StopNode(BaseFlow flowNode)
 {
     if (flowNode != null && flowNode is IStoppable stoppable)
     {
         stoppable.Stop();
     }
 }
        public void Start()
        {
            flowNodes = nodes.Where(x => typeof(BaseFlow).IsAssignableFrom(x.GetType())).Cast <BaseFlow>().ToArray();
            BaseFlow startNode = flowNodes.FirstOrDefault(x => x.IsStartNode);

            SwitchNode(startNode);
        }
        private void SwitchNode(BaseFlow nextNode)
        {
            StopNode(CurrentNode);

            CurrentNode = nextNode;

            StartNode(CurrentNode);
        }
Beispiel #6
0
 /// <summary>
 /// 有资源需要下载时,要提示给用户,这个函数是通知弹出提示框用的
 /// </summary>
 /// <param name="func"></param>
 public void SetDownloadNoticeFunc(DownloadNoticeCall func)
 {
     if (!_initialized)
     {
         return;
     }
     convertFuncDownloadNoticeCall(func);
     BaseFlow.SetDownloadNoticeCallback(onDownloadNoticeCall);
 }
Beispiel #7
0
 /// <summary>
 /// 设置转移资源是要用到的数据
 /// </summary>
 /// <param name="inAppClientVersion">包内app版本</param>
 /// <param name="inAppBaseVersion">包内分段版本</param>
 /// <param name="appPath">app安装路径,ios是var目录,apk是/data/data目录</param>
 public void SetTransData(string inAppClientVersion, string inAppBaseVersion, string appPath)
 {
     if (!_initialized)
     {
         return;
     }
     BaseFlow.SetInAppVer(inAppClientVersion, inAppBaseVersion);
     FlowInstance <Flow1TransResource>().SetExternalData(appPath, _platformType);
 }
Beispiel #8
0
 /// <summary>
 /// 每个流程开始时调用,用来记录流程进程
 /// </summary>
 /// <param name="callback"></param>
 public void SetOnFlowBeginCallback(ActionCall callback)
 {
     if (!_initialized)
     {
         return;
     }
     convertActionCall(callback);
     BaseFlow.SetPerFlowActionCallback(onActionCall);
 }
Beispiel #9
0
    public void Update(uint elapsed)
    {
        BaseFlow bf = GameApp.Instance.GetCurFlow();

        if (bf == null)
        {
            return;
        }

        if (bf.GetFlowEnum() == GAME_FLOW_ENUM.GAME_FLOW_MAIN)
        {
            Module.Update(elapsed);
        }
    }
Beispiel #10
0
        public void Initialize(string storedLocalXmlPath, string inAppLocalXmlPath, string appPath, string storePath, PlatformType platformtype, int halfCpuCoreCount = 4)
        {
            if (_initialized)
            {
                return;
            }
            _localXmlPath      = storedLocalXmlPath;
            this._threadFinish = true;
            this._localXmlPath = storedLocalXmlPath;
            this._storePath    = storePath;
            this._appPath      = appPath;
            this._platformType = platformtype;

            this._flowList = new List <BaseFlow>();
            //整包下载流程

            /*this._flowList.Add(new Flow1TransResource());
             * this._flowList.Add(new Flow2LocalXml());
             * this._flowList.Add(new Flow3RemoteXml());
             * this._flowList.Add(new Flow4DownloadClient());
             * //_flowList.Add(new Flow5DownloadBaseRes());
             * //_flowList.Add(new Flow6ReleaseBaseRes());
             * //_flowList.Add(new Flow7DownloadMapFile());
             * this._flowList.Add(new Flow7ExDownloadMapFile());
             * //_flowList.Add(new Flow8CheckResource());
             * this._flowList.Add(new Flow8ExCheckResource());
             * this._flowList.Add(new Flow9RepairResource());
             * this._flowList.Add(new FlowFinish());
             * this._initialized = true;*/

            //分段下载流程
            this._flowList.Add(new Flow1TransResource());
            this._flowList.Add(new Flow2LocalXml());
            this._flowList.Add(new Flow3RemoteXml());
            this._flowList.Add(new Flow4DownloadClient());
            _Flow5DownloadBaseRes = new Flow5DownloadBaseRes();
            this._flowList.Add(_Flow5DownloadBaseRes);
            this._flowList.Add(new Flow6ReleaseBaseRes());
            _flowList.Add(new Flow7ExDownloadMapFile());
            this._flowList.Add(new Flow8CheckResource());
            this._flowList.Add(new Flow9RepairResource());
            this._flowList.Add(new FlowFinish());
            this._initialized = true;

            BaseFlow.SetPath(storedLocalXmlPath, inAppLocalXmlPath, storePath, appPath);
            InitBackDownload(halfCpuCoreCount);
        }
Beispiel #11
0
    private void onFlowExit(BaseFlow flow, FLOW_EXIT_CODE exitCode)
    {
        GAME_FLOW_ENUM flowType = flow.GetFlowEnum();

        if (exitCode == FLOW_EXIT_CODE.FLOW_EXIT_CODE_NEXT)
        {
            if (flowType == GAME_FLOW_ENUM.GAME_FLOW_VERIFY)
            {
                setNextFlow(GAME_FLOW_ENUM.GAME_FLOW_LOGIN);
            }
            else if (flowType == GAME_FLOW_ENUM.GAME_FLOW_LOGIN)
            {
                setNextFlow(GAME_FLOW_ENUM.GAME_FLOW_MAIN);
            }
            else if (flowType == GAME_FLOW_ENUM.GAME_FLOW_MAIN)
            {
                setNextFlow(GAME_FLOW_ENUM.GAME_FLOW_LOGIN);
            }
        }
    }
Beispiel #12
0
    public void ChangeFlow(BaseFlow flow, bool isStack = false)
    {
        if (currentFlow != null)
        {
            if (isStack)
            {
                prevFlow.Push(currentFlow);
            }

            currentFlow.Exit();
        }

        currentFlow = flow;

        currentFlow.Enter();

        if (loadingProcess != null)
        {
            StopCoroutine(loadingProcess);
        }
        loadingProcess = StartCoroutine(LoadingProcess());
    }
Beispiel #13
0
    public void BackToFlow()
    {
        if (prevFlow.Count == 0)
        {
            return;
        }

        if (currentFlow != null)
        {
            currentFlow.Exit();
        }

        currentFlow = (BaseFlow)prevFlow.Pop();

        currentFlow.Enter();

        if (loadingProcess != null)
        {
            StopCoroutine(loadingProcess);
        }
        loadingProcess = StartCoroutine(LoadingProcess());
    }
Beispiel #14
0
        /// <summary>
        /// 在线程中执行更新流程
        /// </summary>
        private void updateFlowByThread()
        {
            bool continueFlow = false;

            CurrentFlow = null;
            _abortFlows = false;
            int resultCode   = CodeDefine.RET_SUCCESS;
            int runFlowCount = 0;

            while (true && !_abortFlows)
            {
                BaseFlow oldFlow = null;
                continueFlow = false;
                runFlowCount = 0;
                for (int i = 0; !_abortFlows && i < _flowList.Count; ++i)
                {
                    runFlowCount++;
                    CurrentFlow = _flowList[i];
                    UpdateLog.DEBUG_LOG(CurrentFlow.FlowName());

                    CurrentFlow.OnEnter(oldFlow);
                    resultCode = CurrentFlow.Work();
                    CurrentFlow.OnLeave(resultCode);

                    //更新客户端,跳过所有流程
                    if (resultCode == CodeDefine.RET_SKIP_BY_DOWNLOAD_APP)
                    {
                        UpdateLog.DEBUG_LOG("Download Client finish, skip all left flows!!!");
                        break;
                    }

                    //需要强制释放资源,重新走更新流程
                    if (resultCode == CodeDefine.RET_SKIP_BY_FORCE_TRANS_RESOURCE)
                    {
                        FlowInstance <Flow1TransResource>().SetForceUnzip();
                        continueFlow = true;
                        break;
                    }

                    //中断操作
                    if (resultCode == CodeDefine.RET_SKIP_BY_ABORT)
                    {
                        UpdateLog.DEBUG_LOG("Abort flow -> " + CurrentFlow.FlowName());
                        break;
                    }

                    if (resultCode == CodeDefine.RET_SKIP_BY_DISABLEDOWNLOAD)
                    {
                        UpdateLog.DEBUG_LOG("Not support download, skip all flows!!!");
                        break;
                    }

                    //取消操作
                    if (resultCode == CodeDefine.RET_SKIP_BY_CANCEL)
                    {
                        UpdateLog.DEBUG_LOG("Skip flow by cancel download option, exit game!!!");
                        break;
                    }

                    if (resultCode < CodeDefine.RET_SUCCESS)
                    {
                        break;
                    }

                    oldFlow = CurrentFlow;
                }

                if (!continueFlow)
                {
                    break;
                }
            }

            if (runFlowCount != _flowList.Count)
            {
                FlowInstance <FlowFinish>().FinishWithError(resultCode);
            }

            _threadFinish = true;

            //重新开启
            if (_restart)
            {
                UpdateLog.DEBUG_LOG("Restart update");
                StartUpdate();
            }
            else
            {
                UpdateLog.DEBUG_LOG("Finish update flow!!! " + resultCode);
            }
        }
Beispiel #15
0
    public void Update(uint elapsed)
    {
        mElapsed += elapsed;
        if (mElapsed < UPDATE_INTERVAL)
        {
            return;
        }

        elapsed = mElapsed;

        mElapsed = 0;

        if (mEventSystem != null)
        {
            mEventSystem.Update();
        }
        if (mSceneManager != null)
        {
            mSceneManager.Update(elapsed);
        }
        if (mWindowManager != null)
        {
            mWindowManager.Update(elapsed);
        }
        if (mSoundManager != null)
        {
            mSoundManager.Update(elapsed);
        }
        if (mAnimationManager != null)
        {
            mAnimationManager.Update();
        }
        if (mInputSystem != null)
        {
            mInputSystem.Update();
        }
        if (mBossBloodUIManager != null)
        {
            mBossBloodUIManager.Update(elapsed);
        }

        if (mPromptManager != null)
        {
            mPromptManager.Update(elapsed);
        }
        if (mPopTipManager != null)
        {
            mPopTipManager.Update(elapsed);
        }
        if (mGuideManager != null)
        {
            mGuideManager.Update(elapsed);
        }

        if (mEggManager != null)
        {
            mEggManager.Update(elapsed);
        }

        if (mQuackUIManager != null)
        {
            mQuackUIManager.Update(elapsed);
        }

        if (mShopManager != null)
        {
            mShopManager.Update(elapsed);
        }

        if (mModuleManager != null)
        {
            mModuleManager.Update(elapsed);
        }

        if (mNextFlow != GAME_FLOW_ENUM.GAME_FLOW_INVAILD)
        {
            if (mCurFlow != null)
            {
                mCurFlow.Term();
                mCurFlow = null;
            }
            GAME_FLOW_ENUM curFlowEnum = mNextFlow;
            mNextFlow = GAME_FLOW_ENUM.GAME_FLOW_INVAILD;

            mCurFlow = createNextFlow(curFlowEnum);
        }

        if (mCurFlow != null)
        {
            FLOW_EXIT_CODE exitCode = mCurFlow.Update(elapsed);
            if (exitCode != FLOW_EXIT_CODE.FLOW_EXIT_CODE_NONE)
            {
                onFlowExit(mCurFlow, exitCode);
            }
        }
    }