#ifndef __MOD_HEARTBEAT_H #define __MOD_HEARTBEAT_H #pragma once #include "SpBase.h" #include "HeartBeatFSM.h" #include "HeartBeat_server_g.h" using namespace HeartBeat; #include "HealthManager_msg_g.h" using namespace HealthManager; class HeartBeatServerSession : public HeartBeatService_ServerSessionBase { public: HeartBeatServerSession(CHeartBeatEntity* pEntity):m_pEntity(pEntity){} virtual ~HeartBeatServerSession(){} void Handle_Instruction(SpReqAnsContext::Pointer ctx); void Handle_CardActive(SpReqAnsContext::Pointer ctx); private: CHeartBeatEntity* m_pEntity; }; class CHeartBeatEntity : public CEntityBase, public ISysVarListener, public IBroadcastListener { public: CHeartBeatEntity():m_bConnetedSS(false){} virtual ~CHeartBeatEntity(){} virtual const char *GetEntityName() const { return "HeartBeat"; } virtual void OnPreStart(CAutoArray strArgs,CSmartPointer pTransactionContext) { LOG_FUNCTION(); ErrorCodeEnum rt = m_fsm.Init(this); GetFunction()->RegistSysVarEvent("TerminalStage", this); pTransactionContext->SendAnswer(rt); } virtual void OnPrePause(CSmartPointer pTransactionContext) { pTransactionContext->SendAnswer(Error_Succeed); } virtual void OnPreContinue(CSmartPointer pTransactionContext) { pTransactionContext->SendAnswer(Error_Succeed); } virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer pTransactionContext) { pTransactionContext->SendAnswer(Error_Succeed); } virtual CServerSessionBase* OnNewSession(const char*,const char*) { LOG_FUNCTION(); return new HeartBeatServerSession(this); } void Instruction(SpReqAnsContext::Pointer ctx) { InstructionEvent *pEvt = new InstructionEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } void CardActive(SpReqAnsContext::Pointer ctx) { CardActiveEvent *pEvt = new CardActiveEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } virtual void OnSysVarEvent(const char *pszKey, const char *pszValue, const char *pszOldValue, const char *pszEntityName); virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer pTransactionContext) { m_fsm.SelfTest(eTestType,pTransactionContext); } virtual bool IsService()const{return true;} virtual bool IsMultiThread()const{return false;} virtual void OnBroadcastEvent(CUUID SubID, const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, CAutoBuffer Buffer); virtual void OnLog(const CAutoArray &SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel, const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID, const CAutoArray &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext &pLinkInfo); private: CHeartBeatFSM m_fsm; bool m_bConnetedSS; }; #endif //__MOD_HEARTBEAT_H