chenshijun
2019-09-11 9389544d4cc56ef00084e8dbb6afb73e1ec00eca
tasktag/tasktag.go
@@ -1,45 +1,63 @@
package tasktag
import (
   "fmt"
   "sync"
   "basic.com/pubsub/protomsg.git"
    "basic.com/dbapi.git"
   "taskpubsub/logger"
   "taskpubsub/util"
)
var TaskMapLab = make(map[string] *protomsg.TaskLabel)
var taskapi dbapi.TaskApi
var TaskLabelMap sync.Map
func Init() {
    fmt.Println("=========== tasktag info ====================")
   var tls []protomsg.TaskLabel
     taskSdks := taskapi.FindAll()
     for _, taskSdk := range taskSdks {
         fmt.Println("test:    ", taskSdk)
         var tl  protomsg.TaskLabel
         tl.Taskid = taskSdk.Task.Taskid
         for _, sdkinfo := range taskSdk.Sdks {
             tl.Sdkids = append(tl.Sdkids, sdkinfo.Id)
         }
         fmt.Println(tl)
         tl.Index=int32(0)
         tls = append(tls, tl)
     }
   GenTasklab(tls)
   for key, value := range TaskMapLab {
      fmt.Println()
      fmt.Println(key, value)
   }
   logger.Info("============= init tasktag info =====================")
   genTaskLabelMap()
   go func(taskflag chan bool) {
      for _ = range taskflag {
         genTaskLabelMap()
         logger.Info("update task finished!")
      }
   }(util.TaskSdkflag)
}
// 从sqlite 接口拿到所有的任务, 每一个任务都有自己的几个算法
//以 taskid 作为key, 对应的算法组合作为 value
func GenTasklab(tasklab []protomsg.TaskLabel) {
   for _, value := range tasklab {
        pv := value
       TaskMapLab[value.Taskid] = &pv
func genTaskLabelMap() {
   var newtls []protomsg.TaskLabel
   for _, taskSdk := range util.TaskSdks {
      var tl protomsg.TaskLabel
      tl.Taskid = taskSdk.Task.Taskid
      tl.Taskname = taskSdk.Task.Taskname
      for _, sdkinfo := range taskSdk.Sdks {
         sdkinfowithtask := new(protomsg.SdkmsgWithTask)
         sdkinfowithtask.Ipcid = sdkinfo.IpcId
         sdkinfowithtask.Sdktype = sdkinfo.SdkType
         logger.Info("======sdkinfowithtask.Sdktype:", sdkinfowithtask.Sdktype)
         sdkinfowithtask.Sdkdata = make([]byte, 1)
         tl.Sdkinfos = append(tl.Sdkinfos, sdkinfowithtask)
      }
      tl.Index = int32(0)
      newtls = append(newtls, tl)
   }
   updateTaskLabelMap(newtls)
   TaskLabelMap.Range(func(k, v interface{}) bool {
      logger.Info(k, v)
      return true
   })
}
func updateTaskLabelMap(taskLabel []protomsg.TaskLabel) {
   TaskLabelMap.Range(func(key interface{}, value interface{}) bool {
      TaskLabelMap.Delete(key)
      return true
   })
   for _, value := range taskLabel {
      pv := value
      TaskLabelMap.Store(value.Taskid, &pv)
   }
}