status.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package alstatus
  2. import (
  3. "fmt"
  4. "net"
  5. "pbx-api-gin/api/model"
  6. "pbx-api-gin/internal/app/mysql"
  7. msgdata "pbx-api-gin/internal/app/stc/data"
  8. "pbx-api-gin/pkg/lfshook"
  9. )
  10. func SendToStc(conn net.Conn, data []byte) {
  11. _, err := conn.Write(data)
  12. if err != nil {
  13. fmt.Println("send msg err:", err)
  14. }
  15. }
  16. // report alarm status to STC
  17. func AlarmStatus(exten string, status string, conn net.Conn) {
  18. //check exten if it is a alarm exten
  19. var data model.Extension
  20. _, er := mysql.DBOrmInstance.Where("exttype = ? and exten = ?", "PAIU", exten).Get(&data)
  21. if er != nil {
  22. lfshook.NewLogger().Logger.Infof("get alarm exten err : %+v", er.Error())
  23. }
  24. if len(data.Extension) == 0 {
  25. return
  26. }
  27. protocol := msgdata.NewProtocol()
  28. protocol.MessageID = 0x26
  29. protocol.DataLength = 0x04
  30. protocol.Data[0] = byte(int(exten[3] - 0)) //车厢号
  31. protocol.Data[1] = byte(int(exten[2] - 0)) //位置号
  32. //报警器工作状态
  33. switch status {
  34. case "unavailable", "Unavailable": //offline
  35. protocol.Data[2] = 0x00
  36. case "idle", "Idle": //idle
  37. protocol.Data[2] = 0x01
  38. case "dial": //dial
  39. protocol.Data[2] = 0x02
  40. //invite the PACU to queue
  41. //action.Dial("PACU", "0300", "default", "0300", "0300", "PJSIP")
  42. case "queue": //hold
  43. protocol.Data[2] = 0x03
  44. case "connect": //connect
  45. protocol.Data[2] = 0x04
  46. }
  47. encoded, errEn := protocol.Encode()
  48. if errEn != nil {
  49. fmt.Println("Encode error:", errEn)
  50. return
  51. }
  52. SendToStc(conn, encoded)
  53. }
  54. // report broadcast status to STC
  55. func PaStatus(src string, patype string, operation string, conn net.Conn) {
  56. protocol := msgdata.NewProtocol()
  57. protocol.MessageID = 0x22
  58. protocol.DataLength = 0x04
  59. //广播发起方
  60. switch src {
  61. case "2311": //offline
  62. protocol.Data[0] = 0x01
  63. case "2381": //idle
  64. protocol.Data[0] = 0x08
  65. case "": //idle
  66. protocol.Data[0] = 0x00
  67. }
  68. //广播类型
  69. switch patype {
  70. case "C2C": //司机对讲
  71. protocol.Data[1] = 0x01
  72. case "C2P": //人工广播
  73. protocol.Data[1] = 0x02
  74. case "DOR": //开关门提示音
  75. protocol.Data[1] = 0x03
  76. case "EMG": //紧急广播
  77. protocol.Data[1] = 0x04
  78. case "AlARM": //报警
  79. protocol.Data[1] = 0x05
  80. case "CPA": //地面广播
  81. protocol.Data[1] = 0x06
  82. case "SPE": //特殊
  83. protocol.Data[1] = 0x07
  84. case "STN": //报站
  85. protocol.Data[1] = 0x08
  86. case "CH": //自检
  87. protocol.Data[1] = 0x09
  88. }
  89. //操作类型
  90. switch operation {
  91. case "start": //
  92. protocol.Data[2] = 0x01
  93. case "end": //
  94. protocol.Data[2] = 0x02
  95. case "refuse": //
  96. protocol.Data[2] = 0x03
  97. case "fail": //
  98. protocol.Data[2] = 0x04
  99. case "continue": //
  100. protocol.Data[2] = 0x05
  101. }
  102. encoded, errEn := protocol.Encode()
  103. if errEn != nil {
  104. fmt.Println("Encode error:", errEn)
  105. return
  106. }
  107. SendToStc(conn, encoded)
  108. }