Files
Sun1602/Tools/WiseClient/Logic/LogicFlowController.cpp
T
2022-10-26 12:25:11 +08:00

126 lines
2.5 KiB
C++

#include "stdafx.h"
#include <Object/WiseUser.h>
#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<sSIG_STEP_ARG>();
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;
}
};
}