frame.go 844 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package frame
  2. import (
  3. "fw/rt2/context"
  4. )
  5. type WAIT int
  6. const (
  7. WRONG WAIT = iota
  8. STOP
  9. LATER
  10. NOW
  11. )
  12. // LIFO-стек, позволяет затолкнуть фрейм связанный с другим фреймом
  13. type Stack interface {
  14. PushFor(f, parent Frame)
  15. Pop()
  16. Top() Frame
  17. }
  18. //фрейм
  19. type Frame interface {
  20. Do() WAIT
  21. OnPush(root Stack, parent Frame)
  22. OnPop()
  23. Parent() Frame
  24. Root() Stack
  25. context.ContextAware
  26. }
  27. //пользовательская функция, которую выполнит фрейм, может поставить на очередь выполнения себя или другую функцию
  28. type Sequence func(f Frame) (Sequence, WAIT)
  29. func Tail(x WAIT) (seq Sequence) {
  30. return func(f Frame) (Sequence, WAIT) { return nil, x }
  31. }
  32. func End() (Sequence, WAIT) { return nil, STOP }