#include "stdafx.h" #include #include "LogicFlowController.h" #include "Logic.Active.h" #include "Logic.Passive.h" DECLARE_BASE_WISE_STEP_FUNCTION() { LogicFlowController::CreateTable(); } REGISTER_STEP_HANDLER_BASE(eWISE_ROUTINES_INIT_START_LOGIC_FLOW); LogicFlowController::LogicFlowController() { m_eGROUPofLF = LFG_MAX; m_eSTEP = S_000000_START_MARK_LF; m_eCONTROL = LFRET_SUCCESS_DEFAULT; m_pContainer = NULL; m_pWiseUser = NULL; m_WorkLoad.Initialize(); } LogicFlowController::~LogicFlowController() { } BOOL LogicFlowController::DoInit() { m_eSTEP = S_000000_START_MARK_LF; return TRUE; } BOOL LogicFlowController::IsComplete() { return (BOOL)(S_000099_CLOSURE_MARK_LF == m_eSTEP); } BOOL LogicFlowController::DoRelease() { m_pWiseUser->Release(); sSIG_NOTIFY rNOTIFY; rNOTIFY.SUBTYPE() = sSIG_NOTIFY::NTF_USER_RELEASED; WORK_LOAD().OnMsg(&rNOTIFY); WORK_LOAD().Release(TRUE); return TRUE; } void LogicFlowController::ChangeNextStep() { if(S_000099_CLOSURE_MARK_LF != m_eSTEP) { m_eSTEP = (LF_DEFINE)(((DWORD)m_eSTEP)+1); m_eCONTROL = LFRET_SUCCESS_DEFAULT; } } BOOL LogicFlowController::GotoStep(LF_DEFINE step, PASSING_ARG IN arguments) { if((DWORD)step > (DWORD)S_000099_CLOSURE_MARK_LF) return FALSE; m_eSTEP = step; m_eCONTROL = LFRET_SUCCESS_JUMP; //arguments return TRUE; } void LogicFlowController::OnMsg(sSIG_MSG* pSIG_MSG) { sSIG_WISEBASE& rSIG_BASE = *(sSIG_WISEBASE*)pSIG_MSG; sSIG_LF_MAIN& rSIG_PLOGIC = *(sSIG_LF_MAIN*)pSIG_MSG; sSIG_STEP_ARG& rARG = rSIG_PLOGIC.TypeOf(); if((eSIG_WISEMSG::LF_MAIN_CMD == rSIG_BASE.SIGTYPE()) && (GetGroupOfLF() == rARG.GROUP)) goto MAIN_CMD_PROC; eWISESUBTYPE& rSUBTYPE = rSIG_PLOGIC.SUBTYPE(); //if(sSIG_LF_MAIN::CLOSURE_STEP == rSUBTYPE) // DoRelease(); //else WORK_LOAD().OnMsg(pSIG_MSG); return; MAIN_CMD_PROC: { // ´ÙÀ½ ·ÎÁ÷Àº eSIG_WISEMSG::LF_MAIN_CMD ¸¸ Àü´ãÇÑ´Ù. eWISESUBTYPE& rSUBTYPE = rSIG_PLOGIC.SUBTYPE(); switch(rSUBTYPE) { case sSIG_LF_MAIN::NO_TYPE: break; case sSIG_LF_MAIN::ACTIVATE_JUMP_STEP: { GotoStep(rARG.STEP, NULL); } break; case sSIG_LF_MAIN::ACTIVATE_NEXT_STEP: ChangeNextStep(); break; case sSIG_LF_MAIN::CLOSURE_STEP: { WORK_LOAD().Release(TRUE); UserSessionMgr& rMGR = GetWiseUser()->GetSessionMgr(); rMGR.Disconnect(AGENT_SESSION); rMGR.Disconnect(WORLD_SESSION); rMGR.Disconnect(LOGIN_FRONT_SESSION); //GotoStep(S_000099_CLOSURE_MARK_LF, NULL); } break; default: DEBUGGING_CODE_L1("NO-ACTION by OnMSG"); return; } }; }