123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package cfg
- import (
- "cicv-data-closedloop/kinglong/common/cfg"
- "cicv-data-closedloop/kinglong/common/cutil"
- "cicv-data-closedloop/kinglong/common/log"
- "cicv-data-closedloop/kinglong_msgs"
- "plugin"
- "strconv"
- "strings"
- )
- var (
- TopicOfNodeFaultInfo = "/nodefault_info"
- TopicOfCicvLocation = "/cicv_location"
- TopicOfTpperception = "/tpperception"
- TopicOfFaultInfo = "/fault_info"
- TopicOfDataRead = "/data_read"
- RuleOfNodefaultInfo []func(data *kinglong_msgs.FaultInfo) string
- RuleOfCicvLocation []func(data *kinglong_msgs.PerceptionLocalization) string
- RuleOfTpperception []func(data *kinglong_msgs.PerceptionObjects, velocityX float64, velocityY float64, yaw float64) string
- RuleOfFaultInfo []func(data *kinglong_msgs.FaultVec) string
- RuleOfDataRead []func(data *kinglong_msgs.Retrieval) string
- LabelMapTriggerId = make(map[string]string)
- )
- func InitTriggerConfig() {
- log.GlobalLogger.Info("主节点加载触发器插件 - 开始。")
- // 下载所有触发器的文件
- for _, trigger := range cfg.PlatformConfig.TaskTriggers {
- // 获取文件名
- pathSplit := strings.Split(trigger.TriggerScriptPath, "/")
- fileName := pathSplit[len(pathSplit)-1]
- // 下载
- triggerLocalPath := cfg.CloudConfig.TriggersDir + fileName
- cutil.CreateParentDir(triggerLocalPath)
- log.GlobalLogger.Info("下载触发器插件从 ", trigger.TriggerScriptPath, " 到 ", triggerLocalPath)
- err := cfg.OssBucket.GetObjectToFile(trigger.TriggerScriptPath, triggerLocalPath)
- if err != nil {
- log.GlobalLogger.Error("下载 oss 上的触发器插件失败:", err)
- continue
- }
- // 载入插件到数组
- open, err := plugin.Open(triggerLocalPath)
- if err != nil {
- log.GlobalLogger.Error("加载本地插件", triggerLocalPath, "失败。", err)
- continue
- }
- topic0, err := open.Lookup("Topic")
- if err != nil {
- log.GlobalLogger.Error("加载本地插件", triggerLocalPath, "中的Topic方法失败。", err)
- continue
- }
- topic1, ok := topic0.(func() string)
- if ok != true {
- log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func() string):", err)
- continue
- }
- topic2 := topic1()
- rule, err := open.Lookup("Rule")
- if err != nil {
- log.GlobalLogger.Error("加载本地插件", triggerLocalPath, "中的Rule方法失败。", err)
- continue
- }
- if TopicOfNodeFaultInfo == topic2 {
- f, ok := rule.(func(data *kinglong_msgs.FaultInfo) string)
- if ok != true {
- log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(data *kinglong_msgs.FaultInfo) string):", err)
- continue
- }
- RuleOfNodefaultInfo = append(RuleOfNodefaultInfo, f)
- } else if TopicOfCicvLocation == topic2 {
- f, ok := rule.(func(data *kinglong_msgs.PerceptionLocalization) string)
- if ok != true {
- log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(data *kinglong_msgs.PerceptionLocalization) string):", err)
- continue
- }
- RuleOfCicvLocation = append(RuleOfCicvLocation, f)
- } else if TopicOfTpperception == topic2 {
- f, ok := rule.(func(data *kinglong_msgs.PerceptionObjects, velocityX float64, velocityY float64, yaw float64) string)
- if ok != true {
- log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(data *kinglong_msgs.PerceptionObjects, velocityX float64, velocityY float64, yaw float64) string):", err)
- continue
- }
- RuleOfTpperception = append(RuleOfTpperception, f)
- } else if TopicOfFaultInfo == topic2 {
- f, ok := rule.(func(data *kinglong_msgs.FaultVec) string)
- if ok != true {
- log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(data *kinglong_msgs.FaultVec) string):", err)
- continue
- }
- RuleOfFaultInfo = append(RuleOfFaultInfo, f)
- } else if TopicOfDataRead == topic2 {
- f, ok := rule.(func(data *kinglong_msgs.Retrieval) string)
- if ok != true {
- log.GlobalLogger.Error("插件", triggerLocalPath, "中的Topic方法必须是(func(data *kinglong_msgs.Retrieval) string):", err)
- continue
- }
- RuleOfDataRead = append(RuleOfDataRead, f)
- } else {
- log.GlobalLogger.Error("未知的topic:", topic2)
- continue
- }
- label, err := open.Lookup("Label")
- if err != nil {
- log.GlobalLogger.Error("加载本地插件 ", triggerLocalPath, " 中的 Label 方法失败。", err)
- continue
- }
- labelFunc := label.(func() string)
- labelString := labelFunc()
- LabelMapTriggerId[labelString] = strconv.Itoa(trigger.TriggerId)
- log.GlobalLogger.Info("主节点加载触发器插件:【ros topic】=", topic2, ",【触发器label】=", labelString, "【触发器ID】=", trigger.TriggerId, "【label和id映射关系】=", LabelMapTriggerId)
- }
- log.GlobalLogger.Info("主节点加载触发器插件 - 成功。")
- }
|