|
@@ -10,6 +10,7 @@ import (
|
|
|
"pbx-api-gin/internal/app/ami/action"
|
|
|
"pbx-api-gin/internal/app/ami/model"
|
|
|
"pbx-api-gin/internal/app/mysql"
|
|
|
+ "pbx-api-gin/internal/app/stc/active"
|
|
|
msgdata "pbx-api-gin/internal/app/stc/data"
|
|
|
"pbx-api-gin/pkg/lfshook"
|
|
|
"strings"
|
|
@@ -40,7 +41,6 @@ func HandleStcCmd(ctx context.Context, conn net.Conn) {
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
// 将新读取的数据追加到缓冲区
|
|
|
buf.Write(tmp[:n])
|
|
|
}
|
|
@@ -63,34 +63,37 @@ func processPacket(packet []byte) {
|
|
|
fmt.Println("Invalid packet length")
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
lfshook.NewLogger().Logger.Infof("Get data from STC ===============:%x", packet)
|
|
|
+ //check if the cmd type is avtive
|
|
|
+ if packet[5] == 0x03 { // ACTIVE
|
|
|
+ Active([1]byte{packet[7]})
|
|
|
+ }
|
|
|
|
|
|
- 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])
|
|
|
+ if active.Actived {
|
|
|
+ switch packet[5] {
|
|
|
+ case 0x01: // heartbeat
|
|
|
+ // handle heartbeat
|
|
|
+ case 0x02: // STN
|
|
|
+ StationAnn(packet)
|
|
|
+ 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])
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -122,15 +125,55 @@ func StationAnn(data []byte) (err error) {
|
|
|
// 激活信号
|
|
|
func Active(data [1]byte) {
|
|
|
|
|
|
+ var info model.Sysinfo
|
|
|
+
|
|
|
Num := int(data[0])
|
|
|
+ lfshook.NewLogger().Logger.Infof("Active data : %x", Num)
|
|
|
|
|
|
switch Num { // 设置全局的激活信号,并通过协议(待定)通知终端注册到对应的激活主机上
|
|
|
case 0:
|
|
|
+
|
|
|
+ info.Name = "cab_active"
|
|
|
+ info.Value = "0"
|
|
|
+
|
|
|
+ _, er := mysql.DBOrmInstance.Where("name = ?", "cab_active").Update(&info)
|
|
|
+ if er != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
case 1:
|
|
|
+ if active.CabNum == "1" {
|
|
|
+ info.Name = "cab_active"
|
|
|
+ info.Value = "1"
|
|
|
+ active.Actived = true
|
|
|
+ } else {
|
|
|
+ info.Name = "cab_active"
|
|
|
+ info.Value = "0"
|
|
|
+ active.Actived = false
|
|
|
+ }
|
|
|
+ _, er := mysql.DBOrmInstance.Where("name = ?", "cab_active").Update(&info)
|
|
|
+ if er != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
case 8:
|
|
|
- case 9:
|
|
|
- }
|
|
|
|
|
|
+ if active.CabNum == "8" {
|
|
|
+ info.Name = "cab_active"
|
|
|
+ info.Value = "1"
|
|
|
+ active.Actived = true
|
|
|
+ } else {
|
|
|
+ info.Name = "cab_active"
|
|
|
+ info.Value = "0"
|
|
|
+ active.Actived = false
|
|
|
+ }
|
|
|
+
|
|
|
+ _, er := mysql.DBOrmInstance.Where("name = ?", "cab_active").Update(&info)
|
|
|
+ if er != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// SPC ,特殊服务消息广播
|
|
@@ -247,7 +290,7 @@ func SelfCheck(data []byte) {
|
|
|
// 全局变量:记录正在抑制的 exten
|
|
|
var (
|
|
|
suppressedExts = sync.Map{} // map[string]struct{},值存在即表示被抑制
|
|
|
- suppressionMu sync.Mutex // 保护初始化和清理操作(可选)
|
|
|
+ //suppressionMu sync.Mutex // 保护初始化和清理操作(可选)
|
|
|
)
|
|
|
|
|
|
// suppressKey 生成用于抑制的 key(可以根据需求扩展)
|
|
@@ -266,6 +309,7 @@ func AlarmHandle(data []byte) {
|
|
|
lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
|
|
|
key := suppressKey(exten, handler)
|
|
|
|
|
|
+ //Drop other handler in 2 sec
|
|
|
// 只对 handler == 0x01 做 2 秒去重
|
|
|
if handler == 0x01 {
|
|
|
if _, loaded := suppressedExts.LoadOrStore(key, struct{}{}); loaded {
|
|
@@ -274,7 +318,7 @@ func AlarmHandle(data []byte) {
|
|
|
}
|
|
|
|
|
|
// 设置2秒后删除该 key,允许下次通过
|
|
|
- time.AfterFunc(4*time.Second, func() {
|
|
|
+ time.AfterFunc(2*time.Second, func() {
|
|
|
suppressedExts.Delete(key)
|
|
|
lfshook.NewLogger().Logger.Debugf("Suppression released for key: %s", key)
|
|
|
})
|
|
@@ -289,25 +333,20 @@ func AlarmHandle(data []byte) {
|
|
|
switch handler {
|
|
|
case 0x01: //answer(ICP+Alarm+PACU)
|
|
|
//NotifyPaiu(exten, "answer")
|
|
|
- err := action.RedirectInQueue(exten, "0402", "ani-rule", "1") // 1车ICP接听PAIU
|
|
|
- if err != nil {
|
|
|
- lfshook.NewLogger().Logger.Infof("================ICP Answer PAD====ERR============ : %+v", err.Error())
|
|
|
- }
|
|
|
- //invite PACU join in
|
|
|
- //action.Hangup("PACU")
|
|
|
- //action.ChanSpy("PACU", exten, false, true)
|
|
|
-
|
|
|
- case 0x04: //answer(ICP+Alarm+PACU)
|
|
|
-
|
|
|
- err := action.RedirectInQueue(exten, "0401", "ano-rule", "1") // 1车OCC接听PAIU
|
|
|
- if err != nil {
|
|
|
- //lfshook.NewLogger().Info(err)
|
|
|
- lfshook.NewLogger().Logger.Infof("================ICP Answer PAD====ERR============ : %+v", err.Error())
|
|
|
+ if active.CabNum == "1" {
|
|
|
+ err := action.RedirectInQueue(exten, "0402", "ani-rule", "1") // 1车ICP接听PAIU
|
|
|
+ if err != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("=========Cab1=======ICP Answer PAD====ERR============ : %+v", err.Error())
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ err := action.RedirectInQueue(exten, "0402", "ani-rule", "8") // 8车ICP接听PAIU
|
|
|
+ if err != nil {
|
|
|
+ lfshook.NewLogger().Logger.Infof("=========Cab8=======ICP Answer PAD====ERR============ : %+v", err.Error())
|
|
|
+ }
|
|
|
}
|
|
|
//invite PACU join in
|
|
|
//action.Hangup("PACU")
|
|
|
//action.ChanSpy("PACU", exten, false, true)
|
|
|
- lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
|
|
|
case 0x02: //hold 重新放回队列里面
|
|
|
NotifyPaiu(exten, "hold")
|
|
|
|