status.go 5.4 KB

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