12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package main
- import (
- "context"
- "fmt"
- "github.com/looplab/fsm"
- )
- func main() {
- fsm := fsm.NewFSM(
- "idle",
- fsm.Events{
- {Name: "produce", Src: []string{"idle"}, Dst: "idle"},
- {Name: "consume", Src: []string{"idle"}, Dst: "idle"},
- {Name: "remove", Src: []string{"idle"}, Dst: "idle"},
- },
- fsm.Callbacks{
- "produce": func(_ context.Context, e *fsm.Event) {
- e.FSM.SetMetadata("message", "hii")
- fmt.Println("produced data")
- },
- "consume": func(_ context.Context, e *fsm.Event) {
- message, ok := e.FSM.Metadata("message")
- if ok {
- fmt.Println("message = " + message.(string))
- }
- },
- "remove": func(_ context.Context, e *fsm.Event) {
- e.FSM.DeleteMetadata("message")
- if _, ok := e.FSM.Metadata("message"); !ok {
- fmt.Println("message removed")
- }
- },
- },
- )
- fmt.Println(fsm.Current())
- err := fsm.Event(context.Background(), "produce")
- if err != nil {
- fmt.Println(err)
- }
- fmt.Println(fsm.Current())
- err = fsm.Event(context.Background(), "consume")
- if err != nil {
- fmt.Println(err)
- }
- fmt.Println(fsm.Current())
- err = fsm.Event(context.Background(), "remove")
- if err != nil {
- fmt.Println(err)
- }
- fmt.Println(fsm.Current())
- }
|