package tasks import ( "context" "encoding/json" "time" "vamicro/report-service/models" "vamicro/report-service/util" "basic.com/valib/logger.git" ) var ( devCtx, statCtx context.Context devCancel, statCancel context.CancelFunc ) func Start(chMsg chan []byte) { // 启动设备信息上报 go deviceInfoReport() // 启动设备状态信息上报 go deviceStateReport() // 实时报警数据上报 go aiResultReport(chMsg) } func ResetDeviceInfoReport() { devCancel() } func ResetDeviceStateReport() { statCancel() } func deviceInfoReport() { logger.Info("start device info report task") devCtx, devCancel = context.WithCancel(context.Background()) for { select { case <-devCtx.Done(): logger.Info("deviceInfoReport exit") go deviceInfoReport() return default: logger.Info("deviceInfoReport") time.Sleep(time.Duration(models.IntervalConfig.DevInfo) * time.Second) } } } func deviceStateReport() { logger.Info("start device state report task") statCtx, statCancel = context.WithCancel(context.Background()) for { select { case <-statCtx.Done(): logger.Info("deviceStateReport exit") go deviceStateReport() return default: logger.Info("deviceStateReport") time.Sleep(time.Duration(models.IntervalConfig.DevState) * time.Second) } } } func aiResultReport(chMsg chan []byte) { for { select { case msg := <-chMsg: go handleRuleMsg(msg) default: time.Sleep(time.Millisecond * 100) } } } func handleRuleMsg(msg []byte) { var ruleMsg = util.RuleMessage{} err := json.Unmarshal(msg, &ruleMsg) if err != nil { logger.Warn("Unmarshal rule msg err", err) return } logger.Info("Recive rule message:", ruleMsg.BaseInfo.CamName, " ", ruleMsg.BaseInfo.TaskName) }