Kaynağa Gözat

update delay

root 3 hafta önce
ebeveyn
işleme
04533d29fa

BIN
deployments/pbx-panel-arm


+ 13 - 13
internal/app/ami/action/call.go

@@ -129,7 +129,7 @@ func HangupTask(TaskName string) {
 }
 
 // interrupt the running task
-func InterruptRunningTask(toRunTask string) {
+func InterruptRunningTask(toRunTask string) string {
 
 	var task priority.TaskInfo
 	var taskName string
@@ -140,12 +140,12 @@ func InterruptRunningTask(toRunTask string) {
 	if toRunTask != "PA" && toRunTask != "PAD-ICP" && toRunTask != "PAD-TMS" { // ignore C2C
 		taskName, task, ok = priority.RegistryTask.HighestPriorityRunningTask1()
 		if !ok {
-			return
+			return ""
 		}
 	} else { // have to check C2C
 		taskName, task, ok = priority.RegistryTask.HighestPriorityRunningTask()
 		if !ok {
-			return
+			return ""
 		}
 	}
 
@@ -161,14 +161,14 @@ func InterruptRunningTask(toRunTask string) {
 				HangupIO() //io
 				//lfshook.NewLogger().Infof("===InterruptRunningTask=ret==== ")
 			}
-			return
+			return taskName
 		}
 	}
 
 	//pad all  reset
 	if toRunTask == "AlarmHoldResetAll" {
 		HangupAllLocalChan()
-		return
+		return taskName
 	}
 
 	switch task.RunType {
@@ -192,7 +192,7 @@ func InterruptRunningTask(toRunTask string) {
 		time.Sleep(time.Millisecond * 200)
 	case "DCS":
 		if toRunTask == "STN" {
-			return
+			return taskName
 		} else if toRunTask == "C2C" {
 			HangupICP()
 			//alstatus.PaStatus("", "DCS", "end")
@@ -204,7 +204,7 @@ func InterruptRunningTask(toRunTask string) {
 		time.Sleep(time.Millisecond * 200)
 	case "STN":
 		if toRunTask == "DCS" {
-			return
+			return taskName
 		} else if toRunTask == "C2C" {
 			HangupICP()
 			//alstatus.PaStatus("", "STN", "end")
@@ -236,7 +236,7 @@ func InterruptRunningTask(toRunTask string) {
 	case "C2C": // Interrupt C2C task running,
 		if toRunTask == "PA" || toRunTask == "PAD-ICP" || toRunTask == "PAD-TMS" {
 			HangupICP()
-			return
+			return taskName
 		}
 
 	case "PAD-ICP", "PAD-TMS": // Interrupt PAD task running,
@@ -251,7 +251,7 @@ func InterruptRunningTask(toRunTask string) {
 		chans, err := CoreShowChannels()
 		if err != nil {
 			lfshook.NewLogger().Infof("InterruptRunningTask CoreShowChannels err:%+v", err)
-			return
+			return taskName
 		}
 
 		//1. Redirect the connected PAD to 0300,hangup the other pad channel
@@ -264,7 +264,7 @@ func InterruptRunningTask(toRunTask string) {
 					err := Redirect(ret.Channel, "0300", "queues-icp-redirect", "", "PAD")
 					if err != nil {
 						lfshook.NewLogger().Infof("InterruptRunningTask Redirect err:%+v", err)
-						return
+						return taskName
 					}
 					lfshook.NewLogger().Infof("====interrupt PAD =1111=== %+v ", ret)
 					number := strings.Split(strings.Split(ret.Channel, "-")[0], "/")[1]
@@ -310,11 +310,11 @@ func InterruptRunningTask(toRunTask string) {
 			resCaller, err := QueueStatus("0301", "") // check OCC queue, get entries
 			if err != nil {
 				lfshook.NewLogger().Infof("QueueStatus err:%+v", err)
-				return
+				return taskName
 			}
 
 			if resCaller == nil {
-				return
+				return taskName
 			}
 
 			if resCaller.Entrys != nil {
@@ -353,7 +353,7 @@ func InterruptRunningTask(toRunTask string) {
 			ConfbridgeKick(task.ConfbridgeID, "all")
 		}
 	}
-
+	return taskName
 }
 
 // Hangup all ICP

+ 33 - 17
internal/app/ami/action/index.go

@@ -36,15 +36,19 @@ func HandleAMI(event map[string]string) {
 			case "#":
 				//lfshook.NewLogger().Infof("===PA interrupt PAD====== ")
 
-				InterruptRunningTask("PA")
-				time.Sleep(time.Millisecond * 200) //wait endpoimt release
+				runningTaskName := InterruptRunningTask("PA")
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 200) //wait endpoint release
+				}
 			case "*": //Cab cab interrupt PAD
 				lfshook.NewLogger().Infof("===Cab cab interrupt PAD and====== ")
 
-				InterruptRunningTask("C2C")
+				runningTaskName := InterruptRunningTask("C2C")
 				//Hangup("2311")
 				//Hangup("2381")
-				time.Sleep(time.Millisecond * 100) //wait endpoimt release
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
 			}
 		}
 
@@ -65,10 +69,14 @@ func HandleAMI(event map[string]string) {
 				}
 
 				if priority.CheckPriority("ManuPa") {
+
 					//hangup others if priority is higher
 					lfshook.NewLogger().Infof("UserEvent event :PA start")
-					InterruptRunningTask("PA")         //PA interrupt other
-					time.Sleep(time.Millisecond * 100) //wait endpoimt release
+					runningTaskName := InterruptRunningTask("PA") //PA interrupt other
+					if runningTaskName != "" {
+						time.Sleep(time.Millisecond * 100) //wait endpoint release
+					}
+
 				} else {
 					Hangup(event["CallerIDNum"]) //lowwer priority ,hangup caller
 				}
@@ -88,10 +96,11 @@ func HandleAMI(event map[string]string) {
 							Hangup(event["CallerIDNum"])
 						}
 					}
-
 					//hangup others if priority is higher
-					InterruptRunningTask("CPA")        //CPA interrupt other
-					time.Sleep(time.Millisecond * 100) //wait endpoimt release
+					runningTaskName := InterruptRunningTask("CPA") //CPA interrupt other
+					if runningTaskName != "" {
+						time.Sleep(time.Millisecond * 100) //wait endpoint release
+					}
 				} else {
 					Hangup(event["CallerIDNum"]) //lowwer priority ,hangup caller
 				}
@@ -106,8 +115,11 @@ func HandleAMI(event map[string]string) {
 				lfshook.NewLogger().Infof("HighestPriorityRunningTask get task :%+v", taskName)
 				if ok {
 					if taskName == "PAD-ICP" || taskName == "PAD-TMS" || taskName == "PA" {
-						InterruptRunningTask("C2C")
-						time.Sleep(time.Millisecond * 100) //wait endpoimt release
+						runningTaskName := InterruptRunningTask("C2C")
+						if runningTaskName != "" {
+							time.Sleep(time.Millisecond * 100) //wait endpoint release
+						}
+
 					} else {
 						lfshook.NewLogger().Infof("CabCab  hangup other the one caller %s", event["CallerIDNum"])
 						if event["CallerIDNum"] == "2311" {
@@ -260,8 +272,10 @@ func HandleAMI(event map[string]string) {
 			lfshook.NewLogger().Infof("Hangup OCC-PAD event: %+v", event)
 
 			// OCC hangup detected, hangup other running channels
-			InterruptRunningTask("PAD-OCC")
-			time.Sleep(time.Millisecond * 100) //wait endpoimt release
+			runningTaskName := InterruptRunningTask("PAD-OCC")
+			if runningTaskName != "" {
+				time.Sleep(time.Millisecond * 100) //wait endpoint release
+			}
 
 			res, _ := QueueStatus("0301", "") // check OCC queue ,if empty PAD end
 			if res == nil {
@@ -543,8 +557,12 @@ func HandleAMI(event map[string]string) {
 		if utils.IsPAIU(event["CallerIDNum"]) && event["Queue"] == "0301" && priority.OCCAnswer == 0 { // The first PAD to OCC ,caller is PAD
 
 			if priority.CheckPriority("PAD-OCC") {
-				InterruptRunningTask("PAD-OCC")    //PAD-OCC interrupt other
-				time.Sleep(time.Millisecond * 100) //wait endpoimt release
+
+				runningTaskName := InterruptRunningTask("PAD-OCC") //PAD-OCC interrupt other
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
+
 				priority.OCCAnswer = 1
 
 				time.Sleep(time.Millisecond * 300)
@@ -758,7 +776,6 @@ func HandleAMI(event map[string]string) {
 		*/
 		//Send PA start msg to STC
 		if utils.IsICP(event["CallerIDNum"]) && event["Exten"] == "0500" { // PA start
-
 			alstatus.PaStatus(event["CallerIDNum"], "PA", "start")
 			//================================
 			task := priority.TaskInfo{
@@ -784,7 +801,6 @@ func HandleAMI(event map[string]string) {
 
 			break
 		} else if utils.IsIO(event["CallerIDNum"]) && event["Exten"] == "0501" { //CPA start
-
 			alstatus.PaStatus(event["CallerIDNum"], "CPA", "start")
 			//================================
 			task := priority.TaskInfo{

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

@@ -19,6 +19,8 @@ var MasterTag = 0
 var TrainDevide = 0
 var RadioFault = 0
 
+//var TaskCreating = ""
+
 var TrainInfoMap = make(map[string]map[int]string)
 
 // 初始化所有列车号

+ 50 - 35
internal/app/stc/broadcast/stc-broadcast.go

@@ -178,19 +178,16 @@ func processPacket(packet []byte) {
 	switch packet[5] {
 	case 0x01: //heartbeat
 		return
-		//lfshook.NewLogger().Logger.Infof("===Get Heartbeat===packet:%x===========", packet)
-		//dataLen := binary.BigEndian.Uint16(packet[6:8])
-
-		//if dataLen == 10 {
-		//	processHeartbeat(packet[8:])
-		//} else {
-		//lfshook.NewLogger().Logger.Infof("=========Heartbeat data err !====len < 10=========")
-		//}
+
 	case 0x02: // STN
 		if active.ActivedCab != "" {
 			if priority.CheckPriority("STN") {
-				action.InterruptRunningTask("STN") //STN interrupt other
-				time.Sleep(time.Millisecond * 100) //wait endpoimt release
+
+				//检查是否有任务真正创建
+				runningTaskName := action.InterruptRunningTask("STN") //STN interrupt other
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
 				StationAnn(packet)
 			} else {
 				alstatus.PaStatus("", "STN", "refuse")
@@ -199,18 +196,23 @@ func processPacket(packet []byte) {
 	case 0x05: // SPC
 		if active.ActivedCab != "" {
 			if priority.CheckPriority("SPC") {
-				action.InterruptRunningTask("SPC") //SPC interrupt other
-				time.Sleep(time.Millisecond * 100) //wait endpoimt release
+				runningTaskName := action.InterruptRunningTask("SPC") //SPC interrupt other
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
 				SpecialAnn(packet)
 			} else {
 				alstatus.PaStatus("", "SPC", "refuse")
 			}
 		}
 	case 0x06: // EMG
+
 		if active.ActivedCab != "" {
 			if priority.CheckPriority("EMG") {
-				action.InterruptRunningTask("EMG") //EMG interrupt other
-				time.Sleep(time.Millisecond * 100) //wait endpoimt release
+				runningTaskName := action.InterruptRunningTask("EMG") //EMG interrupt other
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
 				EmgMsg(packet)
 			} else {
 				alstatus.PaStatus("", "EMG", "refuse")
@@ -220,20 +222,26 @@ func processPacket(packet []byte) {
 		AnnStop([4]byte{packet[8], packet[9], packet[10], packet[11]})
 
 	case 0x08: // DCS
+
 		if active.ActivedCab != "" {
 			if priority.CheckPriority("DCS") {
-				action.InterruptRunningTask("DCS") //DCS interrupt other
-				time.Sleep(time.Millisecond * 100) //wait endpoimt release
+				runningTaskName := action.InterruptRunningTask("DCS") //DCS interrupt other
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
 				DcsAnn(packet)
 			} else {
 				alstatus.PaStatus("", "DCS", "refuse")
 			}
 		}
 	case 0x09: // SELF CHECK
+
 		if active.ActivedCab != "" {
 			if priority.CheckPriority("CHK") {
-				action.InterruptRunningTask("CHK") //CHK interrupt other
-				time.Sleep(time.Millisecond * 100) //wait endpoimt release
+				runningTaskName := action.InterruptRunningTask("CHK") //CHK interrupt other
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
 				SelfCheck(packet)
 			} else {
 				alstatus.PaStatus("", "CHK", "refuse")
@@ -242,8 +250,11 @@ func processPacket(packet []byte) {
 	case 0x0a: // Tone-test
 		if active.ActivedCab != "" {
 			if priority.CheckPriority("VOL") {
-				action.InterruptRunningTask("VOL") //VOL interrupt other
-				time.Sleep(time.Millisecond * 100) //wait endpoimt release
+
+				runningTaskName := action.InterruptRunningTask("VOL") //VOL interrupt other
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
 				ToneTest(packet)
 			} else {
 				alstatus.PaStatus("", "VOL", "refuse")
@@ -254,8 +265,10 @@ func processPacket(packet []byte) {
 
 			//Before Answer PAD
 			if packet[8] == 0x01 {
-				action.InterruptRunningTask("PAD-TMS") //PAD-ICP interrupt other
-				time.Sleep(time.Millisecond * 100)     //wait endpoimt release
+				runningTaskName := action.InterruptRunningTask("PAD-TMS") //PAD-TMS interrupt other
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
 			}
 
 			AlarmHandleTMS(packet)
@@ -282,12 +295,15 @@ func processPacket(packet []byte) {
 		getInfofromSTC(packet[8:])
 
 	case 0x0d: // ICP answer PAD
+
 		if priority.CheckPriority("PAD-ICP") {
 
 			//Before Answer PAD
 			if packet[8] == 0x01 {
-				action.InterruptRunningTask("PAD-ICP") //PAD-ICP interrupt other
-				time.Sleep(time.Millisecond * 100)     //wait endpoimt release
+				runningTaskName := action.InterruptRunningTask("PAD-ICP") //PAD-ICP interrupt other
+				if runningTaskName != "" {
+					time.Sleep(time.Millisecond * 100) //wait endpoint release
+				}
 			}
 
 			if active.QueueTimer != nil {
@@ -302,8 +318,7 @@ func processPacket(packet []byte) {
 		} else {
 			alstatus.PaStatus("", "PAD-ICP", "refuse")
 		}
-
-	case 0xf1: //Set remote master
+		//case 0xf1: //Set remote master
 
 		//default:
 		//fmt.Printf("Unknown command: %x\n", packet[5])
@@ -489,30 +504,30 @@ func AnnStop(data [4]byte) {
 	case 0x03:
 
 		action.HangupTask("DCS")           //STOP DCS
-		time.Sleep(time.Millisecond * 100) //wait endpoimt release
+		time.Sleep(time.Millisecond * 100) //wait endpoint release
 	case 0x04:
 
 		action.HangupTask("EMG")           //STOP EMG
-		time.Sleep(time.Millisecond * 100) //wait endpoimt release
+		time.Sleep(time.Millisecond * 100) //wait endpoint release
 	case 0x07:
 
 		action.HangupTask("SPC")           //STOP SPC
-		time.Sleep(time.Millisecond * 100) //wait endpoimt release
+		time.Sleep(time.Millisecond * 100) //wait endpoint release
 	case 0x08:
 
 		action.HangupTask("STN")           //STOP STN
-		time.Sleep(time.Millisecond * 100) //wait endpoimt release
+		time.Sleep(time.Millisecond * 100) //wait endpoint release
 	case 0x09:
 
 		action.HangupTask("CHK")           //STOP CHK
-		time.Sleep(time.Millisecond * 100) //wait endpoimt release
+		time.Sleep(time.Millisecond * 100) //wait endpoint release
 	case 0x0a:
 
 		action.HangupTask("VOL")           //STOP VOL
-		time.Sleep(time.Millisecond * 100) //wait endpoimt release
+		time.Sleep(time.Millisecond * 100) //wait endpoint release
 	default:
 		action.InterruptRunningTask("")
-		time.Sleep(time.Millisecond * 100) //wait endpoimt release
+		time.Sleep(time.Millisecond * 100) //wait endpoint release
 	}
 }
 
@@ -633,7 +648,7 @@ func AlarmHandleICP(data []byte) {
 			utils.LoggerDebug.Printf("RedirectInQueue err:%+v", err)
 		}
 		action.InterruptRunningTask("")
-		time.Sleep(time.Millisecond * 100) //wait endpoimt release
+		time.Sleep(time.Millisecond * 100) //wait endpoint release
 		//action.HangupICP()
 
 	case 0x03: //hangup
@@ -724,5 +739,5 @@ func AlarmHoldResetAll(handler byte) {
 
 	//hangup running task
 	action.InterruptRunningTask("AlarmHoldResetAll") //Reset PAD ALL
-	time.Sleep(time.Millisecond * 100)               //wait endpoimt release
+	time.Sleep(time.Millisecond * 100)               //wait endpoint release
 }

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

@@ -4,6 +4,7 @@ import (
 	"os"
 	"pbx-api-gin/pkg/utils"
 	"strconv"
+	"sync"
 
 	"gopkg.in/ini.v1"
 )
@@ -111,9 +112,14 @@ func GetPriorityByKey(key string) int {
 	}
 }
 
+var priorityLock sync.RWMutex
+
 // check priority , if the running priority is lowwer than the to run priority
 func CheckPriority(runType string) bool {
 
+	priorityLock.RLock()
+	defer priorityLock.RUnlock() // 自动释放
+
 	//Check special voice can not interrupt
 	if SpecialVoice == 1 {
 		return false