194 lines
6.1 KiB
C++
194 lines
6.1 KiB
C++
#pragma once
|
|
|
|
#include "Logic.Internal.h"
|
|
|
|
#define LF_ACTIVE_HANDLER_DECL(name) LF_RESULT ACTIVE_HANDLER_##name(LogicFlowDelegator* pDelegator, PASSING_ARG IN arguments)
|
|
#define LF_ACTIVE_HANDLER_IMPL(name) LF_RESULT ACTIVE_HANDLER_##name(LogicFlowDelegator* pDelegator, PASSING_ARG IN arguments)
|
|
#define LF_ACTIVE_HANDLER_IMPL_NULL(name) LF_RESULT ACTIVE_HANDLER_##name(LogicFlowDelegator* pDelegator, PASSING_ARG IN arguments) { DEBUGGING_CODE_L1(""); return LFRET_SUCCESS_DEFAULT; }
|
|
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
//
|
|
class WiseUser;
|
|
struct sLINKEDLIST_NODE;
|
|
class ActiveLogic;
|
|
class PassiveLogic;
|
|
|
|
typedef WorkLoadContainer<DWORD> WORK_LOAD_CONTAINER_LF_WORK;
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
// <sSIGNAL_FORWARD_BUFFER>
|
|
struct sSIGNAL_FORWARD_BUFFER
|
|
{
|
|
typedef MSG_BUFFER<4096> sSIGNAL_FORWARD_BUFFER_DATA;
|
|
|
|
template<typename _TY>
|
|
inline _TY& InstanceOf()
|
|
{ return BUFFER.InstanceOf<_TY>(); }
|
|
|
|
template<typename _TY>
|
|
inline _TY& TypeOf()
|
|
{ return BUFFER.TypeOf<_TY>(); }
|
|
|
|
BOOL MSG_EXIST;
|
|
sSIGNAL_FORWARD_BUFFER_DATA BUFFER;
|
|
};
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
// <LogicFlowController>
|
|
class LogicFlowController : public IWorkNode
|
|
{
|
|
public: typedef LF_RESULT (LogicFlowController::*ProcessHandler)(PASSING_ARG IN arguments);
|
|
|
|
public: LogicFlowController();
|
|
~LogicFlowController();
|
|
static void CreateTable();
|
|
static void ReleaseTable();
|
|
|
|
public: inline LF_GROUP_DEFINE GetGroupOfLF() { return m_eGROUPofLF; }
|
|
inline LF_DEFINE GetCurrentSTEP() { return m_eSTEP; }
|
|
inline void SetWiseUser(WiseUser* pUser) { m_pWiseUser = pUser; }
|
|
inline WiseUser* GetWiseUser() { return m_pWiseUser; }
|
|
inline void SetParentContainer(sLINKEDLIST_NODE* pContainer) { m_pContainer = pContainer; }
|
|
inline sLINKEDLIST_NODE* GetParentContainer() { return m_pContainer; }
|
|
|
|
inline
|
|
WORK_LOAD_CONTAINER_LF_WORK& WORK_LOAD() { return m_WorkLoad; }
|
|
//inline sSIGNAL_FORWARD_BUFFER& SIGNAL_BUFFER() { return m_SignalBuffer; }
|
|
|
|
virtual BOOL DoInit();
|
|
virtual BOOL DoProcess(); // Active Handler 처리
|
|
virtual BOOL IsComplete();
|
|
virtual BOOL DoRelease();
|
|
|
|
virtual void OnMsg(sSIG_MSG* pSIG_MSG); // Passive Handler 처리
|
|
|
|
public: void ChangeNextStep();
|
|
BOOL GotoStep(LF_DEFINE step, PASSING_ARG IN arguments);
|
|
|
|
private:
|
|
//typedef list< -- 넘겨줄 인수 목록... list_map?
|
|
private: LF_GROUP_DEFINE m_eGROUPofLF;
|
|
LF_DEFINE m_eSTEP;
|
|
LF_RESULT m_eCONTROL; // DoProcess 수행시 처리 여부
|
|
sLINKEDLIST_NODE* m_pContainer;
|
|
WiseUser* m_pWiseUser;
|
|
WORK_LOAD_CONTAINER_LF_WORK m_WorkLoad;
|
|
//sSIGNAL_FORWARD_BUFFER m_SignalBuffer;
|
|
};
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
// <LogicFlowBase>
|
|
class LogicFlowBase : public IWorkNode
|
|
{
|
|
public: LogicFlowBase(LogicFlowController& rLFC);
|
|
virtual ~LogicFlowBase();
|
|
|
|
public: inline LF_GROUP_DEFINE GetGroupOfLF() { return m_eGROUPofLF; }
|
|
inline LF_DEFINE GetCurrentSTEP() { return m_eSTEP; }
|
|
inline LogicFlowController& LF_CONTROLLER() { return m_rLFC; }
|
|
|
|
virtual BOOL DoInit() = 0;
|
|
virtual BOOL DoProcess();
|
|
virtual BOOL IsComplete();
|
|
virtual BOOL DoRelease() = 0;
|
|
|
|
virtual void OnMsg(sSIG_MSG* pSIG_MSG);
|
|
|
|
inline WORK_LOAD_CONTAINER_LF_WORK& WORK_LOAD() { return m_rLFC.WORK_LOAD(); }
|
|
|
|
protected: virtual void ChangeNextStep();
|
|
virtual BOOL GotoStep(LF_DEFINE step, PASSING_ARG IN arguments);
|
|
|
|
protected: inline LF_DEFINE& STEP() { return m_eSTEP; }
|
|
inline LF_DEFINE& ENDofSTEP() { return m_eENDofSTEP; }
|
|
inline LF_RESULT& CONTROL() { return m_eCONTROL; }
|
|
inline LF_GROUP_DEFINE& GROUPofLF() { return m_eGROUPofLF; }
|
|
|
|
protected: LogicFlowController& m_rLFC;
|
|
LF_GROUP_DEFINE m_eGROUPofLF;
|
|
protected: LF_DEFINE m_eSTEP;
|
|
LF_DEFINE m_eENDofSTEP;
|
|
protected: LF_RESULT m_eCONTROL; // DoProcess 수행시 처리 여부
|
|
};
|
|
|
|
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
// <LogicFlowDelegator><EXPORTS>
|
|
class LogicFlowDelegator
|
|
{
|
|
public: LogicFlowDelegator() : m_pLogicFlow(NULL) {}
|
|
LogicFlowDelegator(LogicFlowBase* pLogicFlow) : m_pLogicFlow(pLogicFlow)
|
|
{
|
|
}
|
|
|
|
inline LF_GROUP_DEFINE GetGroupOfLF()
|
|
{
|
|
if(m_pLogicFlow)
|
|
{
|
|
LogicFlowController& rCONTROL = m_pLogicFlow->LF_CONTROLLER();
|
|
return m_pLogicFlow->GetGroupOfLF();
|
|
}
|
|
return LFG_MAX;
|
|
}
|
|
|
|
inline LF_DEFINE GetCurrentSTEP()
|
|
{
|
|
if(m_pLogicFlow)
|
|
{
|
|
LogicFlowController& rCONTROL = m_pLogicFlow->LF_CONTROLLER();
|
|
return m_pLogicFlow->GetCurrentSTEP();
|
|
}
|
|
return S_999999_LF_EOL_MARK_LF;
|
|
}
|
|
|
|
inline void SetWiseUser(WiseUser* pUser)
|
|
{
|
|
if(m_pLogicFlow)
|
|
{
|
|
LogicFlowController& rCONTROL = m_pLogicFlow->LF_CONTROLLER();
|
|
rCONTROL.SetWiseUser(pUser);
|
|
}
|
|
}
|
|
inline WiseUser* GetWiseUser()
|
|
{
|
|
if(m_pLogicFlow)
|
|
{
|
|
LogicFlowController& rCONTROL = m_pLogicFlow->LF_CONTROLLER();
|
|
return rCONTROL.GetWiseUser();
|
|
}
|
|
return NULL;
|
|
}
|
|
//inline sSIG_MSG* GetSignalMsg()
|
|
//{
|
|
// sSIGNAL_FORWARD_BUFFER& rSIG_BUFFER = m_pLogicFlow->SIGNAL_BUFFER();
|
|
// //if(m_pLogicFlow && (rSIG_BUFFER.MSG_EXIST == TRUE))
|
|
// // return &rSIG_BUFFER.TypeOf<sSIG_MSG>();
|
|
// return NULL;
|
|
//}
|
|
|
|
inline void OnMsg(sSIG_MSG* pSIG_MSG)
|
|
{
|
|
if(m_pLogicFlow)
|
|
{
|
|
LogicFlowController& rCONTROL = m_pLogicFlow->LF_CONTROLLER();
|
|
rCONTROL.OnMsg(pSIG_MSG);
|
|
}
|
|
}
|
|
|
|
inline LogicFlowBase* REF() { return m_pLogicFlow; }
|
|
private: LogicFlowBase* m_pLogicFlow;
|
|
};
|
|
|
|
typedef LF_RESULT (*ActiveLogicHandler)(LogicFlowDelegator* pDelegator, PASSING_ARG IN arguments);
|
|
typedef LF_RESULT (*ConditionLogicHandler)(LogicFlowDelegator* pDelegator, PASSING_ARG IN arguments);
|
|
typedef LF_RESULT (*PassiveLogicHandler)(LogicFlowDelegator* pDelegator, PASSING_ARG IN arguments);
|
|
|
|
|
|
|
|
#include "Logic.Internal.Tail.h"
|
|
|
|
// 세부 타입들은 여기서 포함시켜 사용할 것
|
|
#include "LogicFlowIncludeList.h"
|
|
//
|
|
|