sim.go 946 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package main
  2. import (
  3. "log"
  4. "sim3/bus"
  5. _ "sim3/ncl/extra"
  6. "sim3/ncl/tool"
  7. "sim3/portable"
  8. "sync"
  9. )
  10. var wg *sync.WaitGroup = &sync.WaitGroup{}
  11. func init() {
  12. tool.Src = portable.DataSource
  13. }
  14. var busChan chan *bus.Msg
  15. //этот хэндлер только пишет сообщения в канал главной горутины
  16. func busHandler(m *bus.Msg) {
  17. busChan <- m
  18. }
  19. func load() {
  20. t := &tool.Solder{}
  21. t.F("counter.yml")
  22. }
  23. //этот хэндлер обрабатывает сообщения в рамках главной горутины
  24. func handle(m *bus.Msg) {
  25. switch m.Typ {
  26. case "init":
  27. load()
  28. }
  29. }
  30. func main() {
  31. log.Println("sim3 started")
  32. bus.Init(busHandler)
  33. busChan = make(chan *bus.Msg)
  34. wg.Add(1)
  35. go func(wg *sync.WaitGroup, c chan *bus.Msg) {
  36. bus.Process(&bus.Msg{Typ: "init"})
  37. for {
  38. select {
  39. case m := <-c:
  40. handle(m)
  41. }
  42. }
  43. }(wg, busChan)
  44. wg.Wait()
  45. log.Println("sim3 closed")
  46. }