|
@@ -41,7 +41,6 @@ func HandleStcCmd(ctx context.Context, conn net.Conn) {
|
|
}
|
|
}
|
|
return
|
|
return
|
|
}
|
|
}
|
|
-
|
|
|
|
// 将新读取的数据追加到缓冲区
|
|
// 将新读取的数据追加到缓冲区
|
|
buf.Write(tmp[:n])
|
|
buf.Write(tmp[:n])
|
|
}
|
|
}
|
|
@@ -64,34 +63,37 @@ func processPacket(packet []byte) {
|
|
fmt.Println("Invalid packet length")
|
|
fmt.Println("Invalid packet length")
|
|
return
|
|
return
|
|
}
|
|
}
|
|
-
|
|
|
|
lfshook.NewLogger().Logger.Infof("Get data from STC ===============:%x", packet)
|
|
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])
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -126,6 +128,7 @@ func Active(data [1]byte) {
|
|
var info model.Sysinfo
|
|
var info model.Sysinfo
|
|
|
|
|
|
Num := int(data[0])
|
|
Num := int(data[0])
|
|
|
|
+ lfshook.NewLogger().Logger.Infof("Active data : %x", Num)
|
|
|
|
|
|
switch Num { // 设置全局的激活信号,并通过协议(待定)通知终端注册到对应的激活主机上
|
|
switch Num { // 设置全局的激活信号,并通过协议(待定)通知终端注册到对应的激活主机上
|
|
case 0:
|
|
case 0:
|
|
@@ -133,7 +136,7 @@ func Active(data [1]byte) {
|
|
info.Name = "cab_active"
|
|
info.Name = "cab_active"
|
|
info.Value = "0"
|
|
info.Value = "0"
|
|
|
|
|
|
- _, er := mysql.DBOrmInstance.Update(&info)
|
|
|
|
|
|
+ _, er := mysql.DBOrmInstance.Where("name = ?", "cab_active").Update(&info)
|
|
if er != nil {
|
|
if er != nil {
|
|
lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
|
|
lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
|
|
return
|
|
return
|
|
@@ -142,11 +145,13 @@ func Active(data [1]byte) {
|
|
if active.CabNum == "1" {
|
|
if active.CabNum == "1" {
|
|
info.Name = "cab_active"
|
|
info.Name = "cab_active"
|
|
info.Value = "1"
|
|
info.Value = "1"
|
|
|
|
+ active.Actived = true
|
|
} else {
|
|
} else {
|
|
info.Name = "cab_active"
|
|
info.Name = "cab_active"
|
|
info.Value = "0"
|
|
info.Value = "0"
|
|
|
|
+ active.Actived = false
|
|
}
|
|
}
|
|
- _, er := mysql.DBOrmInstance.Update(&info)
|
|
|
|
|
|
+ _, er := mysql.DBOrmInstance.Where("name = ?", "cab_active").Update(&info)
|
|
if er != nil {
|
|
if er != nil {
|
|
lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
|
|
lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
|
|
return
|
|
return
|
|
@@ -156,12 +161,14 @@ func Active(data [1]byte) {
|
|
if active.CabNum == "8" {
|
|
if active.CabNum == "8" {
|
|
info.Name = "cab_active"
|
|
info.Name = "cab_active"
|
|
info.Value = "1"
|
|
info.Value = "1"
|
|
|
|
+ active.Actived = true
|
|
} else {
|
|
} else {
|
|
info.Name = "cab_active"
|
|
info.Name = "cab_active"
|
|
info.Value = "0"
|
|
info.Value = "0"
|
|
|
|
+ active.Actived = false
|
|
}
|
|
}
|
|
|
|
|
|
- _, er := mysql.DBOrmInstance.Update(&info)
|
|
|
|
|
|
+ _, er := mysql.DBOrmInstance.Where("name = ?", "cab_active").Update(&info)
|
|
if er != nil {
|
|
if er != nil {
|
|
lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
|
|
lfshook.NewLogger().Logger.Infof("update sysinfo err : %+v", er.Error())
|
|
return
|
|
return
|
|
@@ -283,7 +290,7 @@ func SelfCheck(data []byte) {
|
|
// 全局变量:记录正在抑制的 exten
|
|
// 全局变量:记录正在抑制的 exten
|
|
var (
|
|
var (
|
|
suppressedExts = sync.Map{} // map[string]struct{},值存在即表示被抑制
|
|
suppressedExts = sync.Map{} // map[string]struct{},值存在即表示被抑制
|
|
- suppressionMu sync.Mutex // 保护初始化和清理操作(可选)
|
|
|
|
|
|
+ //suppressionMu sync.Mutex // 保护初始化和清理操作(可选)
|
|
)
|
|
)
|
|
|
|
|
|
// suppressKey 生成用于抑制的 key(可以根据需求扩展)
|
|
// suppressKey 生成用于抑制的 key(可以根据需求扩展)
|
|
@@ -302,6 +309,7 @@ func AlarmHandle(data []byte) {
|
|
lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
|
|
lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
|
|
key := suppressKey(exten, handler)
|
|
key := suppressKey(exten, handler)
|
|
|
|
|
|
|
|
+ //Drop other handler in 2 sec
|
|
// 只对 handler == 0x01 做 2 秒去重
|
|
// 只对 handler == 0x01 做 2 秒去重
|
|
if handler == 0x01 {
|
|
if handler == 0x01 {
|
|
if _, loaded := suppressedExts.LoadOrStore(key, struct{}{}); loaded {
|
|
if _, loaded := suppressedExts.LoadOrStore(key, struct{}{}); loaded {
|
|
@@ -310,7 +318,7 @@ func AlarmHandle(data []byte) {
|
|
}
|
|
}
|
|
|
|
|
|
// 设置2秒后删除该 key,允许下次通过
|
|
// 设置2秒后删除该 key,允许下次通过
|
|
- time.AfterFunc(4*time.Second, func() {
|
|
|
|
|
|
+ time.AfterFunc(2*time.Second, func() {
|
|
suppressedExts.Delete(key)
|
|
suppressedExts.Delete(key)
|
|
lfshook.NewLogger().Logger.Debugf("Suppression released for key: %s", key)
|
|
lfshook.NewLogger().Logger.Debugf("Suppression released for key: %s", key)
|
|
})
|
|
})
|
|
@@ -325,9 +333,16 @@ func AlarmHandle(data []byte) {
|
|
switch handler {
|
|
switch handler {
|
|
case 0x01: //answer(ICP+Alarm+PACU)
|
|
case 0x01: //answer(ICP+Alarm+PACU)
|
|
//NotifyPaiu(exten, "answer")
|
|
//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())
|
|
|
|
|
|
+ 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
|
|
//invite PACU join in
|
|
//action.Hangup("PACU")
|
|
//action.Hangup("PACU")
|