AccessAuthFSM.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. Event_InitFinishOK,
  47. Event_SyncTimeFailed //同步时间失败
  48. };
  49. BEGIN_FSM_STATE(CAccessAuthFSM)
  50. FSM_STATE_ENTRY(s1, "Isolate",s1_on_entry,s1_on_exit,s1_on_event)
  51. FSM_STATE_ENTRY(s2, "Checking",s2_on_entry,s2_on_exit,s2_on_event)
  52. FSM_STATE_ENTRY(s3, "Failure",s3_on_entry,s3_on_exit,s3_on_event)
  53. FSM_STATE_ENTRY(s4, "Cancel", s4_on_entry, s4_on_exit, s4_on_event)
  54. FSM_STATE_ENTRY(s5, "Login", s5_on_entry, s5_on_exit, s5_on_event)
  55. FSM_STATE_ENTRY(s6, "Leaving", s6_on_entry, s6_on_exit, s6_on_event)
  56. FSM_STATE_ENTRY(s7, "LostTrust", s7_on_entry, s7_on_exit, s7_on_event)
  57. END_FSM_STATE()
  58. BEGIN_FSM_RULE(CAccessAuthFSM,s1)
  59. FSM_RULE_ENTRY_ANY(s1, s2, Event_StartRegist)
  60. //FSM_RULE_ENTRY_ANY(s2, s3, Event_UpdateWKFail)
  61. FSM_RULE_ENTRY_ANY(s2, s3, Event_ReqTokenFail)
  62. FSM_RULE_ENTRY_ANY(s2, s3, Event_CheckMD5Fail)
  63. FSM_RULE_ENTRY_ANY(s2, s4, Event_ReqTokenCancel)
  64. FSM_RULE_ENTRY_ANY(s2, s5, Event_ReqTokenSucc)
  65. FSM_RULE_ENTRY_ANY(s2, s3, Event_SyncTimeFailed)
  66. FSM_RULE_ENTRY_ANY(s3, s2, Event_StartRegist)
  67. FSM_RULE_ENTRY_ANY(s4, s1, Event_StateTimeout)
  68. FSM_RULE_ENTRY_ANY(s5, s6, Event_StartUnregist)
  69. FSM_RULE_ENTRY_ANY(s5, s2, Event_StartReregist)
  70. FSM_RULE_ENTRY_ANY(s5, s2, Event_StartRegist)
  71. FSM_RULE_ENTRY_ANY(s5, s7, Event_LostTrust)
  72. FSM_RULE_ENTRY_ANY(s6, s1, Event_StateTimeout)
  73. FSM_RULE_ENTRY_ANY(s7, s1, Event_StateTimeout)
  74. END_FSM_RULE()
  75. void s1_on_entry();
  76. void s1_on_exit();
  77. unsigned int s1_on_event(FSMEvent* event);
  78. void s2_on_entry();
  79. void s2_on_exit();
  80. unsigned int s2_on_event(FSMEvent* event);
  81. void s3_on_entry();
  82. void s3_on_exit();
  83. unsigned int s3_on_event(FSMEvent* event);
  84. void s4_on_entry();
  85. void s4_on_exit();
  86. unsigned int s4_on_event(FSMEvent* event);
  87. void s5_on_entry();
  88. void s5_on_exit();
  89. unsigned int s5_on_event(FSMEvent* event);
  90. void s6_on_entry();
  91. void s6_on_exit();
  92. unsigned int s6_on_event(FSMEvent* event);
  93. void s7_on_entry();
  94. void s7_on_exit();
  95. unsigned int s7_on_event(FSMEvent* event);
  96. public:
  97. DWORD InitDevice(SpReqAnsContext<AccessAuthService_InitDev_Req, AccessAuthService_InitDev_Ans>::Pointer &ctx);
  98. DWORD SyncTime();
  99. int m_finishAccess;
  100. private:
  101. ErrorCodeEnum SetSysVar(const CSimpleStringA &newVal);
  102. ErrorCodeEnum SecureClientConnect();
  103. ErrorCodeEnum SecureClientRelease();
  104. ErrorCodeEnum LoadCenterConfig();
  105. CAccessAuthConn *m_pConnection;
  106. int m_nExitReason;
  107. int m_nExitWay;
  108. int m_nCheckMD5;
  109. };
  110. class MyMutex {
  111. public:
  112. explicit MyMutex(std::_Mutex* pm):mut(pm) {
  113. mut->_Lock();
  114. }
  115. ~MyMutex() {
  116. mut->_Unlock();
  117. }
  118. private:
  119. std::_Mutex* mut;
  120. };