private void StartNode(BaseFlow flowNode) { if (flowNode != null && flowNode is IStartable startable) { startable.Start(); } }
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); }
/// <summary> /// 有资源需要下载时,要提示给用户,这个函数是通知弹出提示框用的 /// </summary> /// <param name="func"></param> public void SetDownloadNoticeFunc(DownloadNoticeCall func) { if (!_initialized) { return; } convertFuncDownloadNoticeCall(func); BaseFlow.SetDownloadNoticeCallback(onDownloadNoticeCall); }
/// <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); }
/// <summary> /// 每个流程开始时调用,用来记录流程进程 /// </summary> /// <param name="callback"></param> public void SetOnFlowBeginCallback(ActionCall callback) { if (!_initialized) { return; } convertActionCall(callback); BaseFlow.SetPerFlowActionCallback(onActionCall); }
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); } }
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); }
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); } } }
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()); }
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()); }
/// <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); } }
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); } } }