// 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() }