dujunchen 1 ヶ月 前
コミット
e0be0df67e

BIN
deployments/pbx-panel-arm


+ 9 - 7
internal/app/ami/action/index.go

@@ -68,13 +68,15 @@ func HandleAMI(event map[string]string) {
 
 			} else if utils.IsIO(event["CallerIDNum"]) { // CPA
 				if priority.CheckPriority("CPA") {
-					if active.ActivedCab == "" { //No active Signal on both side,Hangup caller
-						Hangup(event["CallerIDNum"])
-					} else if active.ActivedCab == "1" && event["CallerIDNum"] == "1411" {
-						Hangup(event["CallerIDNum"])
-					} else if active.ActivedCab == "8" && event["CallerIDNum"] == "1481" {
-						Hangup(event["CallerIDNum"])
-					}
+					if active.RadioFault == 0 {
+						if active.ActivedCab == "" { //No active Signal on both side,Hangup caller
+							Hangup(event["CallerIDNum"])
+						} else if active.ActivedCab == "1" && event["CallerIDNum"] == "1411" {
+							Hangup(event["CallerIDNum"])
+						} else if active.ActivedCab == "8" && event["CallerIDNum"] == "1481" {
+							Hangup(event["CallerIDNum"])
+						}
+					} //Radio 故障时CPA无任何发起限制
 
 					//hangup others if priority is higher
 					InterruptRunningTask("CPA")        //CPA interrupt other

+ 13 - 9
internal/app/index.go

@@ -12,17 +12,11 @@ import (
 )
 
 func StartApp() {
-	//init asterisk
-	if !utils.CheckAsterisk() {
-		lfshook.NewLogger().Infof("Check asterisk , if not running , run cmd /usr/sbin/asterisk !")
-		utils.ExecCmdAsync("/usr/sbin/asterisk")
-		time.Sleep(3 * time.Second)
-	}
-
+	time.Sleep(2 * time.Second)
 	//Get cab number acording to IP
 	socket.SetMasterCabNum()
 
-	lfshook.NewLogger().Infof("Get cab number:%s  Master:%+v", active.CabNum, active.Master)
+	lfshook.NewLogger().Infof("============ Get cab number:%s  Master:%+v", active.CabNum, active.Master)
 
 	//init the active status
 	//active.ActivedCab = ""
@@ -46,6 +40,16 @@ func StartApp() {
 		go stc.RecvFromSipServer()
 	}
 
+	lfshook.NewLogger().Infof("=====Check asterisk=======")
+
+	//init asterisk
+	if !utils.CheckAsterisk() {
+		lfshook.NewLogger().Infof("Check asterisk , if not running , run cmd /usr/sbin/asterisk !")
+		utils.ExecCmdAsync("/usr/sbin/asterisk")
+		time.Sleep(3 * time.Second)
+	}
+
+	lfshook.NewLogger().Infof("=====Connect asterisk=======")
 	// 启动其他服务...
 	// 启动 AMI
 	go func() {
@@ -55,7 +59,7 @@ func StartApp() {
 	}()
 
 	//refresh extension status
-	time.Sleep(3 * time.Second)
+	time.Sleep(1 * time.Second)
 
 	utils.ExecCmdAsync("/usr/sbin/asterisk", "-rx", "reload")
 }

+ 5 - 0
internal/app/stc/active/index.go

@@ -14,6 +14,10 @@ var CabNum string
 var ActivedCab = "1"
 var PADTimeout = 30
 var Master = false
+var MasterTag = 0
+
+var TrainDevide = 0
+var RadioFault = 0
 
 var TrainInfoMap = make(map[string]map[int]string)
 
@@ -140,6 +144,7 @@ func GenerateXML(pt string) error {
 }
 
 func InitTrainInfoMap() {
+	lfshook.NewLogger().Infof("Init train info map ..... ")
 
 	for i, train := range TrainNumGr {
 		TrainInfoMap[train] = make(map[int]string)

+ 45 - 12
internal/app/stc/broadcast/stc-broadcast.go

@@ -140,7 +140,7 @@ func processPacket(packet []byte) {
 
 	//check if the cmd type is avtive
 	if packet[5] == 0x03 { // ACTIVE
-		Active([2]byte{packet[8], packet[9]})
+		Active([3]byte{packet[8], packet[9], packet[10]})
 		return
 	}
 
@@ -312,32 +312,65 @@ func StationAnn(data []byte) (err error) {
 }
 
 // 激活信号
-func Active(data [2]byte) {
-
-	//var info model.Sysinfo
-	Signal := int(data[0])
+func Active(data [3]byte) {
 
 	//check asterisk available
 	if active.Master { // master true
 		if !utils.CheckAsterisk() { //check asterisk not available and set master false
-			active.Master = false
-
-			utils.ExecCmd("/etc/init.d/asterisk", "stop", "PBX")
+			if active.MasterTag > 2 {
+				active.Master = false
+				active.MasterTag = 0
+			} else {
+				active.MasterTag++
+			}
+			//utils.ExecCmd("/etc/init.d/asterisk", "stop", "PBX")
+		} else {
+			active.MasterTag = 0
 		}
+
 	} else { // master false, check and start asterisk
 
 		//Master == false
 		if !utils.CheckAsterisk() {
 			if active.CabNum == "8" {
-				utils.ExecCmd("/etc/init.d/asterisk", "start", "PBX")
+				//utils.ExecCmd("/etc/init.d/asterisk", "start", "PBX")
+				utils.ExecCmd("/usr/sbin/asterisk")
 			}
 		}
 
 		//Master == false  cab == 1
-		if active.CabNum == "1" {
-			if utils.CheckAsterisk() {
-				utils.ExecCmd("/etc/init.d/asterisk", "stop", "PBX")
+		//if active.CabNum == "1" {
+		//	if utils.CheckAsterisk() {
+		//		utils.ExecCmd("/etc/init.d/asterisk", "stop", "PBX")
+		//	}
+		//}
+	}
+
+	//var info model.Sysinfo
+	Signal := int(data[0])
+	TrainInfo := int(data[2])
+
+	if TrainInfo != 0 {
+		//Get train devide info
+		DevideInfo := TrainInfo & 0x10
+		if DevideInfo == 1 {
+			active.TrainDevide = 1
+
+			active.Master = true //列车断开,设置两边都Master
+			if !utils.CheckAsterisk() {
+				utils.ExecCmd("/usr/sbin/asterisk")
 			}
+		} else {
+			active.TrainDevide = 0
+		}
+
+		//Radio fault
+		RadioFault1 := TrainInfo & 0x03
+		RadioFault8 := TrainInfo & 0x0c
+		if RadioFault1 == 0 && RadioFault8 == 1 {
+			active.RadioFault = 1
+		} else {
+			active.RadioFault = 0
 		}
 	}
 

+ 15 - 8
internal/app/stc/index.go

@@ -20,6 +20,7 @@ import (
 )
 
 func StartStcConnection(conn net.Conn, cab string) {
+	lfshook.NewLogger().Infof("Connect to STC%s ", cab)
 
 	var connMux sync.Mutex // 保护 conn 的读写
 	var conn1 net.Conn
@@ -170,6 +171,7 @@ func CreateConnection(RemoteCab string) (net.Conn, error) {
 
 func StartConnectionToSipServer(conn net.Conn) {
 
+	lfshook.NewLogger().Infof("Connect to Slave Sip Server ... ")
 	var connMux sync.Mutex // 保护 conn 的读写
 	var conn1 net.Conn
 	var err error
@@ -286,6 +288,9 @@ func Sendheartbeat(ctx context.Context, conn net.Conn) {
 
 // cab == 8
 func RecvFromSipServer() {
+
+	lfshook.NewLogger().Infof("Connect to Master Sip Server  .... ")
+
 	listener, err := net.Listen("tcp", "0.0.0.0:10000")
 	if err != nil {
 		lfshook.NewLogger().Logger.Infof("Sever Listen cab1 err:%+v", err)
@@ -310,6 +315,16 @@ func RecvFromSipServer() {
 				//安全截取实际读到的字节
 				data := buf[:n]
 
+				//Set master = true
+				if data[8] == 0x01 && data[5] == 0xf1 {
+					active.Master = true
+					//return // set to master , stop recv
+				} // else if data[8] == 0x00 && data[5] == 0xf1 {
+				//active.Master = false
+				//}
+				//lfshook.NewLogger().Logger.Infof("Client  received %d bytes: hex=%x", n, data)
+
+				//Respond to remote
 				if active.Master == true {
 					if _, werr := conn.Write([]byte("1")); werr != nil {
 						lfshook.NewLogger().Logger.Infof("Failed to write 'ok' to client: %+v", werr)
@@ -320,14 +335,6 @@ func RecvFromSipServer() {
 					}
 				}
 
-				//Set master = true
-				if data[8] == 0x01 && data[5] == 0xf1 {
-					active.Master = true
-					//return // set to master , stop recv
-				} // else if data[8] == 0x00 && data[5] == 0xf1 {
-				//active.Master = false
-				//}
-				//lfshook.NewLogger().Logger.Infof("Client  received %d bytes: hex=%x", n, data)
 			}
 
 			if err == io.EOF {

+ 1 - 0
internal/app/stc/priority/index.go

@@ -51,6 +51,7 @@ type Tasks struct {
 var AllTasks Tasks
 
 func GetPriority() {
+	lfshook.NewLogger().Infof("Init system priority !")
 
 	_, err := os.Stat(filePath)
 	if err != nil {