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 }