func (self *S0State) Handle(sm hsm.HSM, event hsm.Event) hsm.State { Logln(self.ID(), "- Handle e =", PrintEvent(event.Type())) switch event.Type() { case EventE: sm.QTran(StateS211ID) return nil } return self.Super() }
func (self *CommentState) Handle(sm hsm.HSM, event hsm.Event) hsm.State { Logln(self.ID(), "- Handle") switch event.Type() { case EventChar: fallthrough case EventSlash: sm.QTran(StateCommentID) return nil case EventStar: sm.QTran(StateStarID) return nil } return self.Super() }
func (self *S11State) Handle(sm hsm.HSM, event hsm.Event) hsm.State { Logln(self.ID(), "- Handle e =", PrintEvent(event.Type())) switch event.Type() { case EventG: sm.QTran(StateS211ID) return nil case EventH: annotatedHSM, ok := sm.(*AnnotatedHSM) hsm.AssertTrue(ok) if annotatedHSM.GetFoo() { annotatedHSM.SetFoo(false) return nil } } return self.Super() }
// Handle() is part of the interface State. // It would be called with input events. // Please refer to the state chart for all state transfers and // actions round them. func (self *CodeState) Handle(sm hsm.HSM, event hsm.Event) hsm.State { Logln(self.ID(), "- Handle") switch event.Type() { case EventSlash: // Trigger a state transfer. The target state is slash state. sm.QTranOnEvent(StateSlashID, event) // Return nil to tell the state machine that this event is completely // handled. No need to propagrate it to our super state. return nil case EventChar: e, ok := event.(*CCommentCharEvent) hsm.AssertTrue(ok) commentHSM, ok := sm.(*CCommentHSM) hsm.AssertTrue(ok) commentHSM.ProcessCodeChar(e.Char()) return nil } // Return super state to tell the state machine that this event is // not completely handled. Please propagrate it to our super state. return self.Super() }
func (self *SlashState) Handle(sm hsm.HSM, event hsm.Event) hsm.State { Logln(self.ID(), "- Handle") switch event.Type() { case EventChar: fallthrough case EventSlash: e, ok := event.(CCommentEvent) hsm.AssertTrue(ok) commentHSM, ok := sm.(*CCommentHSM) hsm.AssertTrue(ok) // Record a slash char and e.Char() before calling QTran() to // trigger a state transfer, since both Entry and Exit of this state // are not good places for these codes. commentHSM.ProcessCodeChar('/') commentHSM.ProcessCodeChar(e.Char()) sm.QTran(StateCodeID) return nil case EventStar: sm.QTran(StateCommentID) return nil } return self.Super() }
func (self *S1State) Init(sm hsm.HSM, event hsm.Event) hsm.State { self.VerboseStateHead.Init(sm, event) sm.QInit(StateS11ID) return nil }