You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
1.8 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. package v2
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/tendermint/tendermint/libs/log"
  6. )
  7. type timeCheck struct {
  8. priorityHigh
  9. time time.Time
  10. }
  11. func schedulerHandle(event Event) (Event, error) {
  12. switch event.(type) {
  13. case timeCheck:
  14. fmt.Println("scheduler handle timeCheck")
  15. case Event:
  16. fmt.Println("scheduler handle testEvent")
  17. }
  18. return noOp, nil
  19. }
  20. func processorHandle(event Event) (Event, error) {
  21. switch event.(type) {
  22. case timeCheck:
  23. fmt.Println("processor handle timeCheck")
  24. case Event:
  25. fmt.Println("processor handle event")
  26. }
  27. return noOp, nil
  28. }
  29. type Reactor struct {
  30. demuxer *demuxer
  31. scheduler *Routine
  32. processor *Routine
  33. ticker *time.Ticker
  34. }
  35. // nolint:unused
  36. func (r *Reactor) setLogger(logger log.Logger) {
  37. r.scheduler.setLogger(logger)
  38. r.processor.setLogger(logger)
  39. r.demuxer.setLogger(logger)
  40. }
  41. func (r *Reactor) Start() {
  42. r.scheduler = newRoutine("scheduler", schedulerHandle)
  43. r.processor = newRoutine("processor", processorHandle)
  44. r.demuxer = newDemuxer(r.scheduler, r.processor)
  45. r.ticker = time.NewTicker(1 * time.Second)
  46. go r.scheduler.start()
  47. go r.processor.start()
  48. go r.demuxer.start()
  49. <-r.scheduler.ready()
  50. <-r.processor.ready()
  51. <-r.demuxer.ready()
  52. go func() {
  53. for t := range r.ticker.C {
  54. r.demuxer.trySend(timeCheck{time: t})
  55. }
  56. }()
  57. }
  58. func (r *Reactor) Wait() {
  59. fmt.Println("completed routines")
  60. r.Stop()
  61. }
  62. func (r *Reactor) Stop() {
  63. fmt.Println("reactor stopping")
  64. r.ticker.Stop()
  65. r.demuxer.stop()
  66. r.scheduler.stop()
  67. r.processor.stop()
  68. // todo: accumulator
  69. // todo: io
  70. fmt.Println("reactor stopped")
  71. }
  72. func (r *Reactor) Receive(event Event) {
  73. fmt.Println("receive event")
  74. sent := r.demuxer.trySend(event)
  75. if !sent {
  76. fmt.Println("demuxer is full")
  77. }
  78. }
  79. func (r *Reactor) AddPeer() {
  80. // TODO: add peer event and send to demuxer
  81. }