ledmgr.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. //屏幕管理
  3. import (
  4. "context"
  5. "github.com/sirupsen/logrus"
  6. "lc/common/mqtt"
  7. "lc/common/util"
  8. "sync"
  9. )
  10. var ledMgr *LedMgr
  11. var once sync.Once
  12. type LedMgr struct {
  13. ctx context.Context
  14. cancel context.CancelFunc
  15. downQueue *util.MlQueue
  16. mapTopicHandle map[string]func(m mqtt.Message)
  17. wrlock sync.RWMutex
  18. mapLedDevice map[string]*LedDevice
  19. }
  20. func GetLedMgr() *LedMgr {
  21. once.Do(func() {
  22. ctx, cancel := context.WithCancel(context.Background())
  23. ledMgr = &LedMgr{
  24. ctx: ctx,
  25. cancel: cancel,
  26. mapTopicHandle: make(map[string]func(m mqtt.Message)),
  27. mapLedDevice: make(map[string]*LedDevice),
  28. }
  29. })
  30. return ledMgr
  31. }
  32. func (l *LedMgr) initAll() error {
  33. if err := loadDevInfos(); err != nil {
  34. logrus.Errorf("加载配置文件失败:%s", err.Error())
  35. return err
  36. }
  37. CreateLedDevs()
  38. return nil
  39. }
  40. func CreateLedDevs() {
  41. for _, info := range ledInfos {
  42. device := NewLedDevice(info)
  43. ledMgr.mapLedDevice[device.IP] = device
  44. }
  45. }
  46. // todo
  47. func (l *LedMgr) Update() error {
  48. return nil
  49. }
  50. func (l *LedMgr) HandleMessage(m mqtt.Message) {
  51. l.downQueue.Put(m)
  52. }