mod_heartbeat.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #ifndef __MOD_HEARTBEAT_H
  2. #define __MOD_HEARTBEAT_H
  3. #pragma once
  4. #include "SpBase.h"
  5. #include "HeartBeatFSM.h"
  6. #include "HeartBeat_server_g.h"
  7. using namespace HeartBeat;
  8. #include "SelfChecker_client_g.h"
  9. using namespace SelfChecker;
  10. #include "HealthManager_msg_g.h"
  11. using namespace HealthManager;
  12. class HeartBeatServerSession : public HeartBeatService_ServerSessionBase
  13. {
  14. public:
  15. HeartBeatServerSession(CHeartBeatEntity* pEntity):m_pEntity(pEntity){}
  16. virtual ~HeartBeatServerSession(){}
  17. void Handle_Instruction(SpReqAnsContext<HeartBeatService_Instruction_Req, HeartBeatService_Instruction_Ans>::Pointer ctx);
  18. void Handle_CardActive(SpReqAnsContext<HeartBeatService_CardActive_Req, HeartBeatService_CardActive_Ans>::Pointer ctx);
  19. void Handle_CrossTermCall(SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx);
  20. virtual void Handle_CallFromILToRVC(SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx);
  21. virtual void Handle_CallResultToIL(SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx);
  22. private:
  23. CHeartBeatEntity* m_pEntity;
  24. };
  25. class CHeartBeatEntity : public CEntityBase, public ISysVarListener, public IBroadcastListener
  26. {
  27. public:
  28. CHeartBeatEntity():m_bConnetedSS(false),m_pSelfCheckerClient(NULL){}
  29. virtual ~CHeartBeatEntity(){}
  30. virtual const char *GetEntityName() const { return "HeartBeat"; }
  31. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
  32. {
  33. LOG_FUNCTION();
  34. ErrorCodeEnum rt = m_fsm.Init(this);
  35. Dbg("Init:%d", rt);
  36. GetFunction()->RegistSysVarEvent("TradeManageState", this);
  37. GetFunction()->RegistSysVarEvent("TerminalManagerState", this);
  38. GetFunction()->RegistSysVarEvent("TerminalStage", this);
  39. CUUID uuidCardSwiper;
  40. GetFunction()->SubscribeBroadcast("CardSwiper", "", this, uuidCardSwiper);
  41. pTransactionContext->SendAnswer(rt);
  42. }
  43. virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
  44. {
  45. pTransactionContext->SendAnswer(Error_Succeed);
  46. }
  47. virtual void OnPreContinue(CSmartPointer<ITransactionContext> pTransactionContext)
  48. {
  49. pTransactionContext->SendAnswer(Error_Succeed);
  50. }
  51. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  52. {
  53. pTransactionContext->SendAnswer(Error_Succeed);
  54. }
  55. virtual CServerSessionBase* OnNewSession(const char*,const char*)
  56. {
  57. LOG_FUNCTION();
  58. return new HeartBeatServerSession(this);
  59. }
  60. void Instruction(SpReqAnsContext<HeartBeatService_Instruction_Req, HeartBeatService_Instruction_Ans>::Pointer ctx)
  61. {
  62. InstructionEvent *pEvt = new InstructionEvent();
  63. pEvt->ctx = ctx;
  64. m_fsm.PostEventFIFO(pEvt);
  65. }
  66. void CardActive(SpReqAnsContext<HeartBeatService_CardActive_Req, HeartBeatService_CardActive_Ans>::Pointer ctx)
  67. {
  68. CardActiveEvent *pEvt = new CardActiveEvent();
  69. pEvt->ctx = ctx;
  70. m_fsm.PostEventFIFO(pEvt);
  71. }
  72. void CrossTermCall(SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx)
  73. {
  74. CrossTermCallEvent *pEvt = new CrossTermCallEvent();
  75. pEvt->ctx = ctx;
  76. m_fsm.PostEventFIFO(pEvt);
  77. }
  78. void CallFromILToRVC(SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx)
  79. {
  80. ILCallToRVCEvent *pEvt = new ILCallToRVCEvent();
  81. pEvt->ctx = ctx;
  82. m_fsm.PostEventFIFO(pEvt);
  83. }
  84. void CallResultToIL(SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx)
  85. {
  86. CallResultToILEvent *pEvt = new CallResultToILEvent();
  87. pEvt->ctx = ctx;
  88. m_fsm.PostEventFIFO(pEvt);
  89. }
  90. ErrorCodeEnum GetEntityErrorList(int &warmLevel,CSimpleStringA &strList);
  91. virtual void OnSysVarEvent(const char *pszKey,
  92. const char *pszValue, const char *pszOldValue, const char *pszEntityName);
  93. virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
  94. {
  95. LOG_FUNCTION();
  96. m_fsm.SelfTest(eTestType,pTransactionContext);
  97. int warnLevel;
  98. CSimpleStringA strList("");
  99. GetEntityErrorList(warnLevel,strList);
  100. }
  101. virtual bool IsService()const{return true;}
  102. virtual bool IsMultiThread()const{return false;}
  103. virtual void OnBroadcastEvent(CUUID SubID, const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, CAutoBuffer Buffer);
  104. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  105. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  106. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName, const char *pszMessage);
  107. private:
  108. CHeartBeatFSM m_fsm;
  109. SelfCheckerService_ClientBase *m_pSelfCheckerClient;
  110. bool m_bConnetedSS;
  111. };
  112. #endif //__MOD_HEARTBEAT_H