AccessAuthFSM.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "SpFSM.h"
  4. #include "Blob.h"
  5. #include "AccessAuthConn.h"
  6. #include "AccessAuthErrorCode.h"
  7. class MyMutex;
  8. class CAccessAuthFSM : public FSMImpl<CAccessAuthFSM>, public IFSMStateHooker
  9. {
  10. public:
  11. struct ReportStateEvent : public FSMEvent
  12. {
  13. ReportStateEvent(char cNewStage, DWORD dwNewStageTime, char cOldStage, DWORD dwOldStageTime):
  14. FSMEvent(Event_ReportStage), cNewStage(cNewStage), dwNewStageTime(dwNewStageTime),
  15. cOldStage(cOldStage), dwOldStageTime(dwOldStageTime)
  16. {}
  17. char cNewStage;
  18. char cOldStage;
  19. DWORD dwNewStageTime;
  20. DWORD dwOldStageTime;
  21. };
  22. CAccessAuthFSM();
  23. virtual ~CAccessAuthFSM();
  24. virtual void OnStateTrans(int iSrcState, int iDstState);
  25. virtual ErrorCodeEnum OnInit();
  26. virtual ErrorCodeEnum OnExit();
  27. enum{s1, s2, s3, s4, s5, s6, s7};
  28. enum
  29. {
  30. Event_StartRegist = EVT_USER+1,
  31. Event_StartReregist,
  32. Event_ConnectionOK,
  33. Event_EndSyncTime,
  34. Event_UpdateWKSucc,
  35. Event_IgnoreUpdateWK,
  36. Event_UpdateWKFail,
  37. Event_ReqTokenSucc,
  38. Event_ReqTokenFail,
  39. Event_ReqTokenCancel,
  40. Event_StartUnregist,
  41. Event_LostTrust,
  42. Event_StateTimeout, // ÁÙʱ״̬³¬Ê±
  43. Event_ReportStage,
  44. Event_CheckMD5Succ,
  45. Event_CheckMD5Fail
  46. };
  47. BEGIN_FSM_STATE(CAccessAuthFSM)
  48. FSM_STATE_ENTRY(s1, "Isolate",s1_on_entry,s1_on_exit,s1_on_event)
  49. FSM_STATE_ENTRY(s2, "Checking",s2_on_entry,s2_on_exit,s2_on_event)
  50. FSM_STATE_ENTRY(s3, "Failure",s3_on_entry,s3_on_exit,s3_on_event)
  51. FSM_STATE_ENTRY(s4, "Cancel", s4_on_entry, s4_on_exit, s4_on_event)
  52. FSM_STATE_ENTRY(s5, "Login", s5_on_entry, s5_on_exit, s5_on_event)
  53. FSM_STATE_ENTRY(s6, "Leaving", s6_on_entry, s6_on_exit, s6_on_event)
  54. FSM_STATE_ENTRY(s7, "LostTrust", s7_on_entry, s7_on_exit, s7_on_event)
  55. END_FSM_STATE()
  56. BEGIN_FSM_RULE(CAccessAuthFSM,s1)
  57. FSM_RULE_ENTRY_ANY(s1, s2, Event_StartRegist)
  58. //FSM_RULE_ENTRY_ANY(s2, s3, Event_UpdateWKFail)
  59. FSM_RULE_ENTRY_ANY(s2, s3, Event_ReqTokenFail)
  60. FSM_RULE_ENTRY_ANY(s2, s3, Event_CheckMD5Fail)
  61. FSM_RULE_ENTRY_ANY(s2, s4, Event_ReqTokenCancel)
  62. FSM_RULE_ENTRY_ANY(s2, s5, Event_ReqTokenSucc)
  63. FSM_RULE_ENTRY_ANY(s3, s2, Event_StartRegist)
  64. FSM_RULE_ENTRY_ANY(s4, s1, Event_StateTimeout)
  65. FSM_RULE_ENTRY_ANY(s5, s6, Event_StartUnregist)
  66. FSM_RULE_ENTRY_ANY(s5, s2, Event_StartReregist)
  67. FSM_RULE_ENTRY_ANY(s5, s2, Event_StartRegist)
  68. FSM_RULE_ENTRY_ANY(s5, s7, Event_LostTrust)
  69. FSM_RULE_ENTRY_ANY(s6, s1, Event_StateTimeout)
  70. FSM_RULE_ENTRY_ANY(s7, s1, Event_StateTimeout)
  71. END_FSM_RULE()
  72. void s1_on_entry();
  73. void s1_on_exit();
  74. unsigned int s1_on_event(FSMEvent* event);
  75. void s2_on_entry();
  76. void s2_on_exit();
  77. unsigned int s2_on_event(FSMEvent* event);
  78. void s3_on_entry();
  79. void s3_on_exit();
  80. unsigned int s3_on_event(FSMEvent* event);
  81. void s4_on_entry();
  82. void s4_on_exit();
  83. unsigned int s4_on_event(FSMEvent* event);
  84. void s5_on_entry();
  85. void s5_on_exit();
  86. unsigned int s5_on_event(FSMEvent* event);
  87. void s6_on_entry();
  88. void s6_on_exit();
  89. unsigned int s6_on_event(FSMEvent* event);
  90. void s7_on_entry();
  91. void s7_on_exit();
  92. unsigned int s7_on_event(FSMEvent* event);
  93. public:
  94. ErrorCodeEnum InitDevice(SpReqAnsContext<AccessAuthService_InitDev_Req, AccessAuthService_InitDev_Ans>::Pointer &ctx);
  95. ErrorCodeEnum SyncTime();
  96. int m_finishAccess;
  97. private:
  98. ErrorCodeEnum SetSysVar(const CSimpleStringA &newVal);
  99. ErrorCodeEnum SecureClientConnect();
  100. ErrorCodeEnum SecureClientRelease();
  101. ErrorCodeEnum LoadCenterConfig();
  102. CAccessAuthConn *m_pConnection;
  103. int m_nExitReason;
  104. int m_nExitWay;
  105. int m_nCheckMD5;
  106. };
  107. class MyMutex {
  108. public:
  109. explicit MyMutex(std::_Mutex* pm):mut(pm) {
  110. mut->_Lock();
  111. }
  112. ~MyMutex() {
  113. mut->_Unlock();
  114. }
  115. private:
  116. std::_Mutex* mut;
  117. };