auto_reload.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package main
  2. import (
  3. "regexp"
  4. "strconv"
  5. "strings"
  6. "time"
  7. "github.com/radovskyb/watcher"
  8. "lc/common/util"
  9. )
  10. func WatchDevConfig(args ...interface{}) interface{} {
  11. w := watcher.New()
  12. w.SetMaxEvents(20)
  13. w.FilterOps(watcher.Create, watcher.Write, watcher.Remove)
  14. go func() {
  15. for {
  16. select {
  17. case event := <-w.Event:
  18. if !event.IsDir() {
  19. ok, _ := regexp.MatchString(`[1-9].*json`, event.Name())
  20. if ok {
  21. strList := strings.Split(event.Name(), ".")
  22. code, _ := strconv.Atoi(strList[0])
  23. switch event.Op {
  24. case watcher.Create, watcher.Write:
  25. rtuArr, err := LoadDev(uint8(code))
  26. if err != nil {
  27. util.GetTagLog().Errorf("sys", "加载RTU文件[%s]失败:%s", strconv.Itoa(code)+".json", err.Error())
  28. } else {
  29. GetDeviceMgr().UpdateDevices(uint8(code), rtuArr)
  30. }
  31. case watcher.Remove:
  32. GetDeviceMgr().UpdateDevices(uint8(code), nil)
  33. default:
  34. }
  35. }
  36. }
  37. case err := <-w.Error:
  38. util.GetTagLog().Errorf("sys", "WatchDevConfig:发生错误:%s", err.Error())
  39. case <-w.Closed:
  40. return
  41. }
  42. }
  43. }()
  44. if err := w.Add(util.GetPath(1)); err != nil {
  45. util.GetTagLog().Errorf("sys", "WatchDevConfig:Add(conf)发生错误:%s", err.Error())
  46. }
  47. if err := w.Start(time.Second); err != nil {
  48. util.GetTagLog().Errorf("sys", "WatchDevConfig:Start发生错误:%s", err.Error())
  49. }
  50. return 0
  51. }
  52. func WatchModelConfig(args ...interface{}) interface{} {
  53. w := watcher.New()
  54. w.SetMaxEvents(20)
  55. w.FilterOps(watcher.Create, watcher.Write, watcher.Remove)
  56. go func() {
  57. for {
  58. select {
  59. case event := <-w.Event:
  60. if !event.IsDir() {
  61. ok, _ := regexp.MatchString(`[1-9].*json`, event.Name())
  62. if ok {
  63. strList := strings.Split(event.Name(), ".")
  64. tid, _ := strconv.Atoi(strList[0])
  65. switch event.Op {
  66. case watcher.Create:
  67. GetDeviceMgr().UpdateModel(uint16(tid), 2)
  68. case watcher.Write:
  69. GetDeviceMgr().UpdateModel(uint16(tid), 1)
  70. case watcher.Remove:
  71. GetDeviceMgr().UpdateModel(uint16(tid), 0)
  72. default:
  73. }
  74. }
  75. }
  76. case err := <-w.Error:
  77. util.GetTagLog().Errorf("sys", "WatchModelConfig:发生错误:%s", err.Error())
  78. case <-w.Closed:
  79. return
  80. }
  81. }
  82. }()
  83. if err := w.Add(util.GetPath(2)); err != nil {
  84. util.GetTagLog().Errorf("sys", "WatchModelConfig:Add(conf)发生错误:%s", err.Error())
  85. }
  86. if err := w.Start(time.Second); err != nil {
  87. util.GetTagLog().Errorf("sys", "WatchModelConfig:Start发生错误:%s", err.Error())
  88. }
  89. return 0
  90. }
  91. func WatchConfConfig(args ...interface{}) interface{} {
  92. w := watcher.New()
  93. w.SetMaxEvents(20)
  94. w.FilterOps(watcher.Create, watcher.Write)
  95. go func() {
  96. for {
  97. select {
  98. case event := <-w.Event:
  99. if !event.IsDir() {
  100. if event.Name() == "app.json" {
  101. if event.Op == watcher.Create || event.Op == watcher.Write {
  102. UpdateAppConfig()
  103. }
  104. }
  105. if event.Name() == "serial.json" {
  106. if event.Op == watcher.Create || event.Op == watcher.Write {
  107. UpdateSerialConfig()
  108. }
  109. }
  110. }
  111. case err := <-w.Error:
  112. util.GetTagLog().Errorf("sys", "WatchConfConfig:发生错误:%s", err.Error())
  113. case <-w.Closed:
  114. return
  115. }
  116. }
  117. }()
  118. if err := w.Add(util.GetPath(0)); err != nil {
  119. util.GetTagLog().Errorf("sys", "WatchConfConfig:Add(conf)发生错误:%s", err.Error())
  120. }
  121. if err := w.Start(time.Second); err != nil {
  122. util.GetTagLog().Errorf("sys", "WatchConfConfig:Start发生错误:%s", err.Error())
  123. }
  124. return 0
  125. }
  126. func UpdateAppConfig() {
  127. if err := loadAppConfig(); err != nil {
  128. util.GetTagLog().Errorf("sys", "UpdateAppConfig:重新加载app.json文件失败:%s", err.Error())
  129. return
  130. }
  131. }
  132. func UpdateSerialConfig() {
  133. if err := loadSerialConfig(); err != nil {
  134. util.GetTagLog().Errorf("sys", "UpdateSerialConfig:重新加载serial.json文件失败:%s", err.Error())
  135. return
  136. }
  137. GetSerialMgr().AddSerialPorts(serialConfig.Serial)
  138. }