status.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. package alstatus
  2. import (
  3. "fmt"
  4. "net"
  5. "pbx-api-gin/internal/app/stc/active"
  6. msgdata "pbx-api-gin/internal/app/stc/data"
  7. "pbx-api-gin/internal/app/stc/socket"
  8. "pbx-api-gin/pkg/lfshook"
  9. "pbx-api-gin/pkg/utils"
  10. )
  11. func SendToStc(conn net.Conn, data []byte) {
  12. _, err := conn.Write(data)
  13. if err != nil {
  14. fmt.Println("send msg err:", err)
  15. conn.Close()
  16. }
  17. lfshook.NewLogger().Logger.Infof("==send==data:==%x", data)
  18. }
  19. // report alarm status to STC
  20. func AlarmStatus(exten string, status string) {
  21. //check exten if it is a alarm exten
  22. if !utils.IsPAIU(exten) { // if not alarm device , return
  23. return
  24. }
  25. protocol := msgdata.NewProtocol()
  26. protocol.MessageID = 0x26
  27. protocol.DataLength = 0x04
  28. protocol.Data = make([]byte, 4)
  29. protocol.Data[0] = exten[2] - '0' //车厢号
  30. protocol.Data[1] = exten[3] - '0' //位置号
  31. //报警器工作状态
  32. switch status {
  33. case "unavailable", "Unavailable": //offline
  34. protocol.Data[2] = 0x00
  35. case "idle", "Idle": //idle
  36. protocol.Data[2] = 0x01
  37. case "dial": //dial
  38. protocol.Data[2] = 0x02
  39. return
  40. case "queue": //PAD alarm
  41. protocol.Data[2] = 0x03
  42. case "connect": //connect
  43. protocol.Data[2] = 0x04
  44. case "allreset": //allreset
  45. protocol.MessageID = 0x29
  46. protocol.Data[0] = 0x02 //all reset
  47. protocol.Data[1] = 0
  48. protocol.Data[2] = 0
  49. case "allhold": //allhold
  50. protocol.MessageID = 0x29
  51. protocol.Data[0] = 0x01 //all hold
  52. protocol.Data[1] = 0
  53. protocol.Data[2] = 0
  54. }
  55. encoded, errEn := protocol.Encode()
  56. if errEn != nil {
  57. fmt.Println("Encode error:", errEn)
  58. return
  59. }
  60. //check if actived
  61. lfshook.NewLogger().Logger.Infof("===AlarmStatus=ext:%s===carr:%x==========pos:%x=========status:%x", exten, protocol.Data[0], protocol.Data[1], protocol.Data[2])
  62. if active.Actived {
  63. if socket.Conn != nil {
  64. SendToStc(socket.Conn, encoded)
  65. }
  66. if socket.Conn8 != nil {
  67. SendToStc(socket.Conn8, encoded)
  68. }
  69. }
  70. }
  71. // report broadcast status to STC
  72. func PaStatus(src string, patype string, operation string) {
  73. lfshook.NewLogger().Logger.Infof("===PAStatus=Startext:%s=== type:%s=========action:%s", src, patype, operation)
  74. protocol := msgdata.NewProtocol()
  75. protocol.MessageID = 0x22
  76. protocol.DataLength = 0x04
  77. protocol.Data = make([]byte, 4)
  78. //广播发起方
  79. switch src {
  80. case "2311": //mc1
  81. protocol.Data[0] = 0x01
  82. case "2381": //mc8
  83. protocol.Data[0] = 0x08
  84. case "": //
  85. protocol.Data[0] = 0x00
  86. }
  87. //广播类型
  88. switch patype {
  89. case "C2C": //司机对讲---ami
  90. protocol.Data[1] = 0x01
  91. case "PA": //人工广播---ami
  92. protocol.Data[1] = 0x02
  93. case "DCS": //开关门提示音
  94. protocol.Data[1] = 0x03
  95. case "EMG": //紧急广播
  96. protocol.Data[1] = 0x04
  97. case "PAD": //报警
  98. protocol.Data[1] = 0x05
  99. case "CPA": //地面广播---ami
  100. protocol.Data[1] = 0x06
  101. case "SPC": //特殊
  102. protocol.Data[1] = 0x07
  103. case "STN": //报站
  104. protocol.Data[1] = 0x08
  105. case "CHK": //自检
  106. protocol.Data[1] = 0x09
  107. }
  108. //操作类型
  109. switch operation {
  110. case "start": //
  111. protocol.Data[2] = 0x01
  112. case "end": //
  113. protocol.Data[2] = 0x02
  114. case "refuse": //
  115. protocol.Data[2] = 0x03
  116. case "fail": //
  117. protocol.Data[2] = 0x04
  118. case "continue": //
  119. protocol.Data[2] = 0x05
  120. }
  121. encoded, errEn := protocol.Encode()
  122. if errEn != nil {
  123. fmt.Println("Encode error:", errEn)
  124. return
  125. }
  126. if active.Actived {
  127. SendToStc(socket.Conn, encoded)
  128. SendToStc(socket.Conn8, encoded)
  129. }
  130. }
  131. // report broadcast status to STC
  132. func OccPad(operation string) {
  133. lfshook.NewLogger().Logger.Infof("===OCC-PAD========action:%s", operation)
  134. protocol := msgdata.NewProtocol()
  135. protocol.MessageID = 0x2A
  136. protocol.DataLength = 0x04
  137. protocol.Data = make([]byte, 4)
  138. //广播发起方
  139. switch operation {
  140. case "start": //mc1
  141. protocol.Data[0] = 0x01
  142. case "end": //mc8
  143. protocol.Data[0] = 0x02
  144. case "": //
  145. protocol.Data[0] = 0x00
  146. }
  147. encoded, errEn := protocol.Encode()
  148. if errEn != nil {
  149. fmt.Println("Encode error:", errEn)
  150. return
  151. }
  152. if active.Actived {
  153. SendToStc(socket.Conn, encoded)
  154. SendToStc(socket.Conn8, encoded)
  155. }
  156. }
  157. // report broadcast status to STC
  158. func SendRecordFile(filename, rcdtype string) {
  159. //time.Sleep(5 * time.Second)
  160. /*
  161. if !utils.FileExists(filename) {
  162. lfshook.NewLogger().Logger.Infof("===Recording filename not exist:%+v=", filename)
  163. return
  164. }
  165. */
  166. protocol := msgdata.NewProtocol()
  167. protocol.MessageID = 0x31
  168. filenameHex := []byte(filename)
  169. dataLen := len(filenameHex) + 1
  170. protocol.DataLength = uint16(dataLen)
  171. protocol.Data = make([]byte, dataLen)
  172. copy(protocol.Data[1:], filenameHex)
  173. switch rcdtype {
  174. case "C2C": //
  175. protocol.Data[0] = 0x01
  176. case "PA": //
  177. protocol.Data[0] = 0x02
  178. case "PAD": //
  179. protocol.Data[0] = 0x05
  180. case "CPA": //
  181. protocol.Data[0] = 0x06
  182. case "OTR": //
  183. protocol.Data[0] = 0x03
  184. //lfshook.NewLogger().Logger.Infof("===Recording filename:%+v=", protocol.Data)
  185. }
  186. encoded, errEn := protocol.Encode()
  187. if errEn != nil {
  188. fmt.Println("Encode error:", errEn)
  189. return
  190. }
  191. if active.Actived {
  192. SendToStc(socket.Conn, encoded)
  193. SendToStc(socket.Conn8, encoded)
  194. }
  195. }