GUIConsoleFSM.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "SpFSM.h"
  4. #include "guitask.h"
  5. class CGUIConsoleFSM : public FSMImpl<CGUIConsoleFSM>, public IFSMStateHooker
  6. {
  7. public:
  8. enum
  9. {
  10. Event_CoverOpen = EVT_USER+1, // 机盖打开
  11. Event_CoverClose, // 机盖关闭
  12. Event_CertVerified, // 证书验证
  13. Event_SessionEnd, // 进入可维护状态
  14. Event_HighLevel, // 后台提高权限
  15. Event_Takeover, // 权限降级
  16. Event_UKeyInserted, // 插入UKey
  17. Event_UKeyPulled, // 拨出UKey
  18. Event_ForceQuit, // 远程强制退出
  19. };
  20. CGUIConsoleFSM();
  21. ~CGUIConsoleFSM();
  22. private:
  23. virtual ErrorCodeEnum OnInit();
  24. virtual ErrorCodeEnum OnExit();
  25. virtual void OnStateTrans(int iSrcState, int iDstState);
  26. enum{s1, s2, s3, s4, s5};
  27. BEGIN_FSM_STATE(CGUIConsoleFSM)
  28. FSM_STATE_ENTRY(s1, "None",s1_on_entry,s1_on_exit,s1_on_event)
  29. FSM_STATE_ENTRY(s2, "Open",s2_on_entry,s2_on_exit,s2_on_event)
  30. FSM_STATE_ENTRY(s3, "Verified",s3_on_entry,s3_on_exit,s3_on_event)
  31. FSM_STATE_ENTRY(s4, "Maintaining", s4_on_entry, s4_on_exit, s4_on_event)
  32. FSM_STATE_ENTRY(s5, "HighLevel", s5_on_entry, s5_on_exit, s5_on_event)
  33. END_FSM_STATE()
  34. BEGIN_FSM_RULE(CGUIConsoleFSM,s1)
  35. FSM_RULE_ENTRY_ANY(s1, s2, Event_CoverOpen)
  36. FSM_RULE_ENTRY_ANY(s1, s2, Event_UKeyInserted)
  37. FSM_RULE_ENTRY(s2, s4, Event_CertVerified, 1) // 当前无会话,普通权限
  38. FSM_RULE_ENTRY(s2, s5, Event_CertVerified, 2) // 当前无会话,高级权限
  39. FSM_RULE_ENTRY(s3, s4, Event_SessionEnd, 1) // 无高级权限
  40. FSM_RULE_ENTRY(s3, s5, Event_SessionEnd, 2) // 有高级权限
  41. FSM_RULE_ENTRY_ANY(s4, s5, Event_HighLevel)
  42. FSM_RULE_ENTRY_ANY(s2, s1, Event_CoverClose)
  43. FSM_RULE_ENTRY_ANY(s3, s1, Event_CoverClose)
  44. FSM_RULE_ENTRY_ANY(s4, s1, Event_CoverClose)
  45. FSM_RULE_ENTRY_ANY(s5, s1, Event_CoverClose)
  46. FSM_RULE_ENTRY_ANY(s2, s1, Event_UKeyPulled)
  47. FSM_RULE_ENTRY_ANY(s3, s1, Event_UKeyPulled)
  48. FSM_RULE_ENTRY_ANY(s4, s1, Event_UKeyPulled)
  49. FSM_RULE_ENTRY_ANY(s5, s1, Event_UKeyPulled)
  50. FSM_RULE_ENTRY_ANY(s5, s4, Event_Takeover)
  51. FSM_RULE_ENTRY(s3, s1, Event_ForceQuit, 1) // 机盖关闭
  52. FSM_RULE_ENTRY(s3, s2, Event_ForceQuit, 0) // 机盖未关闭
  53. FSM_RULE_ENTRY(s4, s1, Event_ForceQuit, 1) // 机盖关闭
  54. FSM_RULE_ENTRY(s4, s2, Event_ForceQuit, 0) // 机盖未关闭
  55. FSM_RULE_ENTRY(s5, s1, Event_ForceQuit, 1) // 机盖关闭
  56. FSM_RULE_ENTRY(s5, s2, Event_ForceQuit, 0) // 机盖未关闭
  57. END_FSM_RULE()
  58. private:
  59. void s1_on_entry();
  60. void s1_on_exit();
  61. unsigned int s1_on_event(FSMEvent* event);
  62. void s2_on_entry();
  63. void s2_on_exit();
  64. unsigned int s2_on_event(FSMEvent* event);
  65. void s3_on_entry();
  66. void s3_on_exit();
  67. unsigned int s3_on_event(FSMEvent* event);
  68. void s4_on_entry();
  69. void s4_on_exit();
  70. unsigned int s4_on_event(FSMEvent* event);
  71. void s5_on_entry();
  72. void s5_on_exit();
  73. unsigned int s5_on_event(FSMEvent* event);
  74. private:
  75. GUITask *m_pGuiTask;
  76. bool m_bTopMostWin;
  77. };