123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #pragma once
- #include "SpBase.h"
- #include "SpFSM.h"
- #include "guitask.h"
- class CGUIConsoleFSM : public FSMImpl<CGUIConsoleFSM>, public IFSMStateHooker
- {
- public:
- enum
- {
- Event_CoverOpen = EVT_USER+1, // 机盖打开
- Event_CoverClose, // 机盖关闭
- Event_CertVerified, // 证书验证
- Event_SessionEnd, // 进入可维护状态
- Event_HighLevel, // 后台提高权限
- Event_Takeover, // 权限降级
- Event_UKeyInserted, // 插入UKey
- Event_UKeyPulled, // 拨出UKey
- Event_ForceQuit, // 远程强制退出
- };
- CGUIConsoleFSM();
- ~CGUIConsoleFSM();
- private:
- virtual ErrorCodeEnum OnInit();
- virtual ErrorCodeEnum OnExit();
- virtual void OnStateTrans(int iSrcState, int iDstState);
- enum{s1, s2, s3, s4, s5};
-
- BEGIN_FSM_STATE(CGUIConsoleFSM)
- FSM_STATE_ENTRY(s1, "None",s1_on_entry,s1_on_exit,s1_on_event)
- FSM_STATE_ENTRY(s2, "Open",s2_on_entry,s2_on_exit,s2_on_event)
- FSM_STATE_ENTRY(s3, "Verified",s3_on_entry,s3_on_exit,s3_on_event)
- FSM_STATE_ENTRY(s4, "Maintaining", s4_on_entry, s4_on_exit, s4_on_event)
- FSM_STATE_ENTRY(s5, "HighLevel", s5_on_entry, s5_on_exit, s5_on_event)
- END_FSM_STATE()
- BEGIN_FSM_RULE(CGUIConsoleFSM,s1)
- FSM_RULE_ENTRY_ANY(s1, s2, Event_CoverOpen)
- FSM_RULE_ENTRY_ANY(s1, s2, Event_UKeyInserted)
- FSM_RULE_ENTRY(s2, s4, Event_CertVerified, 1) // 当前无会话,普通权限
- FSM_RULE_ENTRY(s2, s5, Event_CertVerified, 2) // 当前无会话,高级权限
- FSM_RULE_ENTRY(s3, s4, Event_SessionEnd, 1) // 无高级权限
- FSM_RULE_ENTRY(s3, s5, Event_SessionEnd, 2) // 有高级权限
- FSM_RULE_ENTRY_ANY(s4, s5, Event_HighLevel)
- FSM_RULE_ENTRY_ANY(s2, s1, Event_CoverClose)
- FSM_RULE_ENTRY_ANY(s3, s1, Event_CoverClose)
- FSM_RULE_ENTRY_ANY(s4, s1, Event_CoverClose)
- FSM_RULE_ENTRY_ANY(s5, s1, Event_CoverClose)
- FSM_RULE_ENTRY_ANY(s2, s1, Event_UKeyPulled)
- FSM_RULE_ENTRY_ANY(s3, s1, Event_UKeyPulled)
- FSM_RULE_ENTRY_ANY(s4, s1, Event_UKeyPulled)
- FSM_RULE_ENTRY_ANY(s5, s1, Event_UKeyPulled)
- FSM_RULE_ENTRY_ANY(s5, s4, Event_Takeover)
- FSM_RULE_ENTRY(s3, s1, Event_ForceQuit, 1) // 机盖关闭
- FSM_RULE_ENTRY(s3, s2, Event_ForceQuit, 0) // 机盖未关闭
- FSM_RULE_ENTRY(s4, s1, Event_ForceQuit, 1) // 机盖关闭
- FSM_RULE_ENTRY(s4, s2, Event_ForceQuit, 0) // 机盖未关闭
- FSM_RULE_ENTRY(s5, s1, Event_ForceQuit, 1) // 机盖关闭
- FSM_RULE_ENTRY(s5, s2, Event_ForceQuit, 0) // 机盖未关闭
- END_FSM_RULE()
- private:
- void s1_on_entry();
- void s1_on_exit();
- unsigned int s1_on_event(FSMEvent* event);
-
- void s2_on_entry();
- void s2_on_exit();
- unsigned int s2_on_event(FSMEvent* event);
- void s3_on_entry();
- void s3_on_exit();
- unsigned int s3_on_event(FSMEvent* event);
- void s4_on_entry();
- void s4_on_exit();
- unsigned int s4_on_event(FSMEvent* event);
- void s5_on_entry();
- void s5_on_exit();
- unsigned int s5_on_event(FSMEvent* event);
- private:
- GUITask *m_pGuiTask;
- bool m_bTopMostWin;
- };
|