mod_ResourceWatcher.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #pragma once
  2. #include "modVer.h"
  3. #include "SpTest.h"
  4. #include "ResourceWatcherFSM.h"
  5. class ResourceWatcherEntity;
  6. class ResourceWatcherServiceSession : public ResourceWatcherService_ServerSessionBase
  7. {
  8. public:
  9. ResourceWatcherServiceSession(ResourceWatcherEntity* pEntity) : m_pEntity(pEntity) {}
  10. virtual ~ResourceWatcherServiceSession() {}
  11. virtual void Handle_Fetch(SpReqAnsContext<ResourceWatcherService_Fetch_Req,
  12. ResourceWatcherService_Fetch_Ans>::Pointer ctx);
  13. virtual void Handle_GetDevInfo(SpReqAnsContext<ResourceWatcherService_GetDevInfo_Req,
  14. ResourceWatcherService_GetDevInfo_Ans>::Pointer ctx);
  15. virtual void Handle_GetCardSwiper(SpReqAnsContext<ResourceWatcherService_GetCardSwiper_Req, ResourceWatcherService_GetCardSwiper_Ans>::Pointer ctx);
  16. virtual void Handle_GetCpuType(SpReqAnsContext<ResourceWatcherService_GetCpuType_Req, ResourceWatcherService_GetCpuType_Ans>::Pointer ctx);
  17. virtual void Handle_OperateFile(SpReqAnsContext<ResourceWatcherService_OperateFile_Req, ResourceWatcherService_OperateFile_Ans>::Pointer ctx);
  18. virtual void Handle_ExtractEventLog(SpReqAnsContext<ResourceWatcherService_ExtractEventLog_Req, ResourceWatcherService_ExtractEventLog_Ans>::Pointer ctx);
  19. private:
  20. ResourceWatcherEntity* m_pEntity;
  21. };
  22. class ResourceWatcherEntity : public CEntityBase, public IBroadcastListener
  23. {
  24. public:
  25. ResourceWatcherEntity() {}
  26. virtual ~ResourceWatcherEntity() {}
  27. virtual const char* GetEntityName() const { return "ResourceWatcher"; }
  28. const char* GetEntityVersion() const { return MODULE_VERSION_FULL; }
  29. ON_ENTITYT_TEST()
  30. virtual CServerSessionBase* OnNewSession(const char* , const char * )
  31. {
  32. LOG_FUNCTION();
  33. return new ResourceWatcherServiceSession(this);
  34. }
  35. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,
  36. CSmartPointer<ITransactionContext> pTransactionContext)
  37. {
  38. LOG_FUNCTION();
  39. ErrorCodeEnum errorCode = Error_Succeed;
  40. CSystemStaticInfo StaticInfo;
  41. errorCode = m_fsm.Init(this);
  42. if (errorCode == Error_Succeed) {
  43. CSmartPointer<IEntityFunction> spEntityFunction = GetFunction();
  44. spEntityFunction->GetSystemStaticInfo(StaticInfo);
  45. if (!StaticInfo.strMachineType.Compare("RVC.Pad", true)) {
  46. errorCode = spEntityFunction->SubscribeBroadcast("CardSwiper", NULL, this, m_uiCardSwiperStatusListener);
  47. if (errorCode != Error_Succeed) {
  48. LOG_TRACE("Subscribe CardSwiper evt failed 0x%x");
  49. }
  50. Dbg("SubScribe CardSwiper status broadcast suc.");
  51. }
  52. }
  53. pTransactionContext->SendAnswer(errorCode);
  54. }
  55. /*ignore*/
  56. virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
  57. {
  58. //m_fsm.TryToConnect();
  59. pTransactionContext->SendAnswer(Error_Succeed);
  60. }
  61. /*ignore*/
  62. virtual void OnPreContinue(CSmartPointer<ITransactionContext> pTransactionContext)
  63. {
  64. pTransactionContext->SendAnswer(Error_Succeed);
  65. }
  66. /*invoke fsm.onExit(), invoked when entity will be closed*/
  67. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,
  68. CSmartPointer<ITransactionContext>pTransactionContext)
  69. {
  70. ErrorCodeEnum errorCode = m_fsm.OnExit();
  71. pTransactionContext->SendAnswer(errorCode);
  72. }
  73. virtual void OnSelfTest(EntityTestEnum eTestType,
  74. CSmartPointer<ITransactionContext>pTransactionContext)
  75. {
  76. m_fsm.SelfTest(eTestType, pTransactionContext);
  77. }
  78. virtual bool IsService() const
  79. {
  80. return true;
  81. }
  82. virtual bool IsMultiThread() const
  83. {
  84. return false;
  85. }
  86. void Fetch(SpReqAnsContext<ResourceWatcherService_Fetch_Req,
  87. ResourceWatcherService_Fetch_Ans>::Pointer ctx)
  88. {
  89. FetchEvent* evt = new FetchEvent();
  90. evt->ctx = ctx;
  91. m_fsm.PostEventFIFO(evt);
  92. }
  93. void GetDevInfo(SpReqAnsContext<ResourceWatcherService_GetDevInfo_Req,
  94. ResourceWatcherService_GetDevInfo_Ans>::Pointer ctx)
  95. {
  96. ctx->Answer(Error_NotImpl);
  97. }
  98. void GetCSwiperStatus(SpReqAnsContext<ResourceWatcherService_GetCardSwiper_Req,
  99. ResourceWatcherService_GetCardSwiper_Ans>::Pointer ctx)
  100. {
  101. ctx->Ans.status = m_fsm.GetCardSwiperVal();
  102. ctx->Answer(Error_Succeed);
  103. }
  104. void GetCPUType(SpReqAnsContext<ResourceWatcherService_GetCpuType_Req,
  105. ResourceWatcherService_GetCpuType_Ans>::Pointer ctx)
  106. {
  107. m_fsm.GetCpuType(ctx);
  108. }
  109. void OperateFile(
  110. SpReqAnsContext<ResourceWatcherService_OperateFile_Req,
  111. ResourceWatcherService_OperateFile_Ans>::Pointer ctx)
  112. {
  113. OperateFileEvent* evt = new OperateFileEvent();
  114. evt->m_ctx = ctx;
  115. m_fsm.PostEventFIFO(evt);
  116. }
  117. void RetrieveEventLog(SpReqAnsContext<ResourceWatcherService_ExtractEventLog_Req,
  118. ResourceWatcherService_ExtractEventLog_Ans>::Pointer ctx)
  119. {
  120. LOG_FUNCTION();
  121. #if defined(RVC_OS_WIN)
  122. m_fsm.PostEventFIFO(new GetEventLogEvent(ctx));
  123. #else
  124. ctx->Answer(Error_NotSupport);
  125. #endif //RVC_OS_WIN
  126. }
  127. #if defined(_MSC_VER)
  128. SP_BEGIN_MSG_DISPATCH_MAP(ResourceWatcherEntity)
  129. SP_BEGIN_ENTITY_MSG("CardSwiper")
  130. SP_MSG_HANDLE_NS(CardSwiper, ConnectStatus, OnCardSwiperConnectStatus)
  131. SP_END_ENTITY_MSG()
  132. SP_END_MSG_DISPATCH_MAP()
  133. #else
  134. virtual void OnBroadcastEvent(CUUID SubID, const char* pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, CAutoBuffer Buffer)
  135. {
  136. }
  137. #endif //_MSC_VER
  138. private:
  139. void OnCardSwiperConnectStatus(const char *pszEntityName, DWORD dwMessageId,
  140. DWORD dwMessageSignature, CardSwiper::ConnectStatus &evt)
  141. {
  142. Dbg("OnCardSwiperConnectStatus %d", evt.status);
  143. QueryCardSwiper cardswiperStatus;
  144. cardswiperStatus.status = evt.status;
  145. m_fsm.m_cardswiperStatus = evt.status;
  146. SpSendBroadcast(GetFunction(), SP_MSG_OF(QueryCardSwiper), SP_MSG_SIG_OF(QueryCardSwiper),
  147. cardswiperStatus);
  148. }
  149. private:
  150. ResourceWatcherFSM m_fsm;
  151. CUUID m_uiCardSwiperStatusListener;
  152. };