|
@@ -0,0 +1,52 @@
|
|
|
|
|
+package agiServer
|
|
|
|
|
+
|
|
|
|
|
+import (
|
|
|
|
|
+ "fmt"
|
|
|
|
|
+ "os"
|
|
|
|
|
+ "pbx-api-gin/internal/app/stc/priority"
|
|
|
|
|
+ "pbx-api-gin/pkg/utils"
|
|
|
|
|
+ "time"
|
|
|
|
|
+
|
|
|
|
|
+ "github.com/CyCoreSystems/agi"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+func StartAGI(serviceAddress, serviceAGIPort string) {
|
|
|
|
|
+
|
|
|
|
|
+ server := fmt.Sprintf("%s:%s", serviceAddress, serviceAGIPort)
|
|
|
|
|
+ err := agi.Listen(server, agiHandler)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ utils.LoggerDebug.Printf("AGI: bind addr error !")
|
|
|
|
|
+ os.Exit(1)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func agiHandler(a *agi.AGI) {
|
|
|
|
|
+ defer a.Close()
|
|
|
|
|
+
|
|
|
|
|
+ taskName, ok := a.Variables["agi_arg_1"]
|
|
|
|
|
+ if !ok {
|
|
|
|
|
+ utils.LoggerDebug.Printf("AGI: Get arg1 error !")
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ time.Sleep(100 * time.Millisecond) //等待userEvent中设置priority.TaskCreating
|
|
|
|
|
+ //检测当前创建中的任务是否时本任务,如果是则直接退出,如果不是则等待其他任务创建完成
|
|
|
|
|
+ utils.LoggerDebug.Printf("AGI: task:%s TaskCreating:%s checking start !", taskName, priority.TaskCreating)
|
|
|
|
|
+ if priority.TaskCreating != taskName {
|
|
|
|
|
+ utils.LoggerDebug.Printf("AGI: %s check task creating ..... ,TaskCreating = %s", taskName, priority.TaskCreating)
|
|
|
|
|
+ //action.WaitTaskCreate(taskName)
|
|
|
|
|
+ for i := 0; i < 20; i++ {
|
|
|
|
|
+ if priority.TaskCreating == "" || priority.TaskCreating == taskName {
|
|
|
|
|
+ utils.LoggerDebug.Printf("AGI: %s check task creating ..... ,TaskCreating = %s Done !", taskName, priority.TaskCreating)
|
|
|
|
|
+ time.Sleep(300 * time.Millisecond) //等待userEvent中的后续操作完成之后再执行dial
|
|
|
|
|
+ return
|
|
|
|
|
+ } else {
|
|
|
|
|
+ utils.LoggerDebug.Printf("AGI: %s check task creating ..... ,TaskCreating = %s waiting !", taskName, priority.TaskCreating)
|
|
|
|
|
+ time.Sleep(time.Millisecond * 100)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ utils.LoggerDebug.Printf("AGI: %s check task creating ..... ,TaskCreating = %s Done !", taskName, priority.TaskCreating)
|
|
|
|
|
+ }
|
|
|
|
|
+ time.Sleep(300 * time.Millisecond) //等待userEvent中的后续操作完成之后再执行dial
|
|
|
|
|
+}
|