data.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/looplab/fsm"
  6. )
  7. func main() {
  8. fsm := fsm.NewFSM(
  9. "idle",
  10. fsm.Events{
  11. {Name: "produce", Src: []string{"idle"}, Dst: "idle"},
  12. {Name: "consume", Src: []string{"idle"}, Dst: "idle"},
  13. {Name: "remove", Src: []string{"idle"}, Dst: "idle"},
  14. },
  15. fsm.Callbacks{
  16. "produce": func(_ context.Context, e *fsm.Event) {
  17. e.FSM.SetMetadata("message", "hii")
  18. fmt.Println("produced data")
  19. },
  20. "consume": func(_ context.Context, e *fsm.Event) {
  21. message, ok := e.FSM.Metadata("message")
  22. if ok {
  23. fmt.Println("message = " + message.(string))
  24. }
  25. },
  26. "remove": func(_ context.Context, e *fsm.Event) {
  27. e.FSM.DeleteMetadata("message")
  28. if _, ok := e.FSM.Metadata("message"); !ok {
  29. fmt.Println("message removed")
  30. }
  31. },
  32. },
  33. )
  34. fmt.Println(fsm.Current())
  35. err := fsm.Event(context.Background(), "produce")
  36. if err != nil {
  37. fmt.Println(err)
  38. }
  39. fmt.Println(fsm.Current())
  40. err = fsm.Event(context.Background(), "consume")
  41. if err != nil {
  42. fmt.Println(err)
  43. }
  44. fmt.Println(fsm.Current())
  45. err = fsm.Event(context.Background(), "remove")
  46. if err != nil {
  47. fmt.Println(err)
  48. }
  49. fmt.Println(fsm.Current())
  50. }