IDevice.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package lc
  2. // 通知接口
  3. type Notifier interface {
  4. Notify(text string, isProgram, speed int)
  5. }
  6. // 校时接口
  7. type CorrectTimer interface {
  8. Correct()
  9. }
  10. func DoCorrectTime(a any) {
  11. if c, ok := a.(CorrectTimer); ok {
  12. c.Correct()
  13. }
  14. }
  15. // 重连接口
  16. type ReConnector interface {
  17. Reconnect()
  18. }
  19. func DoReconnect(a any) {
  20. if c, ok := a.(ReConnector); ok {
  21. c.Reconnect()
  22. }
  23. }
  24. // 单个设备接口
  25. type IDevice interface {
  26. Call(text string, isProgram, speed int) // 触发警告
  27. Rollback() // 恢复初始状态
  28. ReConnector // 重连
  29. CorrectTimer // 校时
  30. }
  31. // 设备信息
  32. type DeviceInfo struct {
  33. Name string
  34. Ip string
  35. Port string
  36. Audio string // 扬声器音频
  37. }
  38. // 单个哨兵设备组合(屏幕+喇叭)
  39. type SentinelDevice struct {
  40. Info DeviceInfo
  41. Screen Screener
  42. Speaker Loudspeaker
  43. }
  44. // 触发警告(屏幕显示+喇叭发声)
  45. func (s *SentinelDevice) Call(text string, isProgram, speed int) {
  46. if s.Screen != nil {
  47. if isProgram == 1 || isProgram == 0 {
  48. s.Screen.Display(Red, DefaultRunMode, DefaultDisplayMode, isProgram, speed, text) // 显示警告
  49. } else if isProgram == 2 {
  50. s.Screen.Display(Red, DefaultRunMode, MoveLeft, isProgram, speed, text) // 显示警告
  51. }
  52. }
  53. //if s.Speaker != nil {
  54. // s.Speaker.Speak("主路来车,请减速") // 语音提示
  55. //}
  56. }
  57. // 恢复初始状态
  58. func (s *SentinelDevice) Rollback() {
  59. if s.Screen != nil {
  60. s.Screen.Display(Red, DefaultRunMode, DefaultDisplayMode, 0, 0, "") //恢复默认
  61. s.Screen.Display(Yellow, DefaultRunMode, DefaultDisplayMode, 1, 0, "减速慢行") // 恢复默认显示
  62. }
  63. }
  64. // 重连设备
  65. func (s *SentinelDevice) Reconnect() {
  66. DoReconnect(s.Screen)
  67. //DoReconnect(s.Speaker)
  68. }
  69. // 校时
  70. func (s *SentinelDevice) Correct() {
  71. DoCorrectTime(s.Screen)
  72. }