mod_heartbeat.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. GetFunction()->RegistSysVarEvent("TradeManageState", this);
  36. GetFunction()->RegistSysVarEvent("TerminalManagerState", this);
  37. GetFunction()->RegistSysVarEvent("TerminalStage", this);
  38. CUUID uuidCardSwiper;
  39. GetFunction()->SubscribeBroadcast("CardSwiper", "", this, uuidCardSwiper);
  40. pTransactionContext->SendAnswer(rt);
  41. }
  42. virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
  43. {
  44. pTransactionContext->SendAnswer(Error_Succeed);
  45. }
  46. virtual void OnPreContinue(CSmartPointer<ITransactionContext> pTransactionContext)
  47. {
  48. pTransactionContext->SendAnswer(Error_Succeed);
  49. }
  50. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  51. {
  52. pTransactionContext->SendAnswer(Error_Succeed);
  53. }
  54. virtual CServerSessionBase* OnNewSession(const char*,const char*)
  55. {
  56. LOG_FUNCTION();
  57. return new HeartBeatServerSession(this);
  58. }
  59. void Instruction(SpReqAnsContext<HeartBeatService_Instruction_Req, HeartBeatService_Instruction_Ans>::Pointer ctx)
  60. {
  61. InstructionEvent *pEvt = new InstructionEvent();
  62. pEvt->ctx = ctx;
  63. m_fsm.PostEventFIFO(pEvt);
  64. }
  65. void CardActive(SpReqAnsContext<HeartBeatService_CardActive_Req, HeartBeatService_CardActive_Ans>::Pointer ctx)
  66. {
  67. CardActiveEvent *pEvt = new CardActiveEvent();
  68. pEvt->ctx = ctx;
  69. m_fsm.PostEventFIFO(pEvt);
  70. }
  71. void CrossTermCall(SpReqAnsContext<HeartBeatService_CrossTermCall_Req, HeartBeatService_CrossTermCall_Ans>::Pointer ctx)
  72. {
  73. CrossTermCallEvent *pEvt = new CrossTermCallEvent();
  74. pEvt->ctx = ctx;
  75. m_fsm.PostEventFIFO(pEvt);
  76. }
  77. void CallFromILToRVC(SpOnewayCallContext<HeartBeatService_CallFromILToRVC_Info>::Pointer ctx)
  78. {
  79. ILCallToRVCEvent *pEvt = new ILCallToRVCEvent();
  80. pEvt->ctx = ctx;
  81. m_fsm.PostEventFIFO(pEvt);
  82. }
  83. void CallResultToIL(SpOnewayCallContext<HeartBeatService_CallResultToIL_Info>::Pointer ctx)
  84. {
  85. CallResultToILEvent *pEvt = new CallResultToILEvent();
  86. pEvt->ctx = ctx;
  87. m_fsm.PostEventFIFO(pEvt);
  88. }
  89. ErrorCodeEnum GetEntityErrorList(int &warmLevel,CSimpleStringA &strList);
  90. virtual void OnSysVarEvent(const char *pszKey,
  91. const char *pszValue, const char *pszOldValue, const char *pszEntityName);
  92. virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
  93. {
  94. m_fsm.SelfTest(eTestType,pTransactionContext);
  95. int warnLevel;
  96. CSimpleStringA strList("");
  97. GetEntityErrorList(warnLevel,strList);
  98. }
  99. virtual bool IsService()const{return true;}
  100. virtual bool IsMultiThread()const{return false;}
  101. virtual void OnBroadcastEvent(CUUID SubID, const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, CAutoBuffer Buffer);
  102. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  103. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  104. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName, const char *pszMessage, const linkContext& pLinkInfo);
  105. private:
  106. CHeartBeatFSM m_fsm;
  107. SelfCheckerService_ClientBase *m_pSelfCheckerClient;
  108. bool m_bConnetedSS;
  109. };
  110. #endif //__MOD_HEARTBEAT_H