#pragma once #include "SpBase.h" #include "SpFSM.h" #include "RemoteControllerCnn.h" class CRemoteControllerFSM : public FSMImpl { public: CRemoteControllerFSM(void); ~CRemoteControllerFSM(void); virtual ErrorCodeEnum OnInit(); virtual ErrorCodeEnum OnExit(); enum{s1, s2, s3, s4}; enum { Event_CreateChannel = EVT_USER+1, Event_ReleaseChannel, Event_EnterMonitor, Event_EnterMaintain, Event_EnterTerminal, Event_ExitTerminal, }; BEGIN_FSM_STATE(CRemoteControllerFSM) FSM_STATE_ENTRY(s1, "None",s1_on_entry,s1_on_exit,s1_on_event) FSM_STATE_ENTRY(s2, "Monitor",s2_on_entry,s2_on_exit,s2_on_event) FSM_STATE_ENTRY(s3, "Maintaining",s3_on_entry,s3_on_exit,s3_on_event) FSM_STATE_ENTRY(s4, "Terminal", s4_on_entry, s4_on_exit, s4_on_event) END_FSM_STATE() BEGIN_FSM_RULE(CRemoteControllerFSM,s1) FSM_RULE_ENTRY_ANY(s1, s2, Event_EnterMonitor) FSM_RULE_ENTRY_ANY(s2, s1, Event_ReleaseChannel) FSM_RULE_ENTRY_ANY(s2, s3, Event_EnterMaintain) FSM_RULE_ENTRY_ANY(s3, s1, Event_ReleaseChannel) FSM_RULE_ENTRY_ANY(s3, s4, Event_EnterTerminal) FSM_RULE_ENTRY_ANY(s4, s1, Event_ReleaseChannel) FSM_RULE_ENTRY_ANY(s4, s3, Event_ExitTerminal) END_FSM_RULE() 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); private: ErrorCodeEnum SecureClientConnect(); ErrorCodeEnum SecureClientRelease(); CRemoteControllerCnn *m_pConnection; };