1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- //go:build ignore
- // +build ignore
- package main
- import (
- "context"
- "fmt"
- "github.com/looplab/fsm"
- )
- type Door struct {
- To string
- FSM *fsm.FSM
- }
- func NewDoor(to string) *Door {
- d := &Door{
- To: to,
- }
- d.FSM = fsm.NewFSM(
- "closed",
- fsm.Events{
- {Name: "open", Src: []string{"closed"}, Dst: "open"},
- {Name: "close", Src: []string{"open"}, Dst: "closed"},
- },
- fsm.Callbacks{
- "enter_state": func(_ context.Context, e *fsm.Event) { d.enterState(e) },
- },
- )
- return d
- }
- func (d *Door) enterState(e *fsm.Event) {
- fmt.Printf("The door to %s is %s\n", d.To, e.Dst)
- }
- func main() {
- door := NewDoor("heaven")
- err := door.FSM.Event(context.Background(), "open")
- if err != nil {
- fmt.Println(err)
- }
- err = door.FSM.Event(context.Background(), "close")
- if err != nil {
- fmt.Println(err)
- }
- }
|