|
@@ -1,7 +1,9 @@
|
|
package broadcast
|
|
package broadcast
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "bytes"
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "io"
|
|
"net"
|
|
"net"
|
|
"pbx-api-gin/internal/app/ami/action"
|
|
"pbx-api-gin/internal/app/ami/action"
|
|
"pbx-api-gin/internal/app/ami/model"
|
|
"pbx-api-gin/internal/app/ami/model"
|
|
@@ -14,6 +16,72 @@ import (
|
|
|
|
|
|
var Pacus = []string{"2111", "2121", "2131", "2141", "2151", "2161", "2171", "2181"}
|
|
var Pacus = []string{"2111", "2121", "2131", "2141", "2151", "2161", "2171", "2181"}
|
|
|
|
|
|
|
|
+func HandleStcCmd(conn net.Conn) {
|
|
|
|
+ var buf bytes.Buffer // 用于累积未处理完的数据流
|
|
|
|
+ tmp := make([]byte, 1024)
|
|
|
|
+
|
|
|
|
+ for {
|
|
|
|
+ n, err := conn.Read(tmp)
|
|
|
|
+ if err != nil {
|
|
|
|
+ if err != io.EOF {
|
|
|
|
+ fmt.Println("Error reading from server:", err)
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 将新读取的数据追加到缓冲区
|
|
|
|
+ buf.Write(tmp[:n])
|
|
|
|
+
|
|
|
|
+ // 尝试从缓冲区中提取完整数据包
|
|
|
|
+ for {
|
|
|
|
+ packet, err := msgdata.ExtractPacket(&buf)
|
|
|
|
+ if err != nil {
|
|
|
|
+ break // 没有完整包或出错,等待更多数据
|
|
|
|
+ }
|
|
|
|
+ // 成功提取一个包,进行处理
|
|
|
|
+ go processPacket(packet) // 使用 goroutine 避免阻塞接收
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 处理单个数据包(原 switch 逻辑迁移过来)
|
|
|
|
+func processPacket(packet []byte) {
|
|
|
|
+ if len(packet) < 6 {
|
|
|
|
+ fmt.Println("Invalid packet length")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ lfshook.NewLogger().Logger.Infof("Get data from STC ===============:%x", packet)
|
|
|
|
+
|
|
|
|
+ switch packet[5] {
|
|
|
|
+ case 0x01: // heartbeat
|
|
|
|
+ // handle heartbeat
|
|
|
|
+ case 0x02: // STN
|
|
|
|
+ StationAnn(packet)
|
|
|
|
+ case 0x03: // ACTIVE
|
|
|
|
+ Active([1]byte{packet[8]})
|
|
|
|
+ case 0x05: // SPC
|
|
|
|
+ SpecialAnn(packet)
|
|
|
|
+ case 0x06: // EMG
|
|
|
|
+ EmgMsg(packet)
|
|
|
|
+ case 0x07: // STOP
|
|
|
|
+ AnnStop([4]byte{packet[8], packet[9], packet[10], packet[11]})
|
|
|
|
+ case 0x08: // DCS
|
|
|
|
+ DcsAnn(packet)
|
|
|
|
+ case 0x09: // SELF CHECK
|
|
|
|
+ SelfCheck(packet)
|
|
|
|
+ case 0x0a:
|
|
|
|
+ AlarmHandle(packet)
|
|
|
|
+ case 0x0b:
|
|
|
|
+ AlarmResetAll()
|
|
|
|
+ case 0x0c:
|
|
|
|
+ RecordStorageConf(packet[8:])
|
|
|
|
+ default:
|
|
|
|
+ fmt.Printf("Unknown command: %x\n", packet[5])
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/*
|
|
func HandleStcCmd(conn net.Conn) {
|
|
func HandleStcCmd(conn net.Conn) {
|
|
|
|
|
|
for {
|
|
for {
|
|
@@ -62,7 +130,7 @@ func HandleStcCmd(conn net.Conn) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+*/
|
|
// STN , 自动报站广播
|
|
// STN , 自动报站广播
|
|
func StationAnn(data []byte) (err error) {
|
|
func StationAnn(data []byte) (err error) {
|
|
|
|
|