#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 WORK_LOAD_CONTAINER_LF_WORK; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // struct sSIGNAL_FORWARD_BUFFER { typedef MSG_BUFFER<4096> sSIGNAL_FORWARD_BUFFER_DATA; template inline _TY& InstanceOf() { return BUFFER.InstanceOf<_TY>(); } template inline _TY& TypeOf() { return BUFFER.TypeOf<_TY>(); } BOOL MSG_EXIST; sSIGNAL_FORWARD_BUFFER_DATA BUFFER; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // 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; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // 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 ¼öÇà½Ã ó¸® ¿©ºÎ }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // 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(); // 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" //