status.go 5.0 KB

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