---
panlei
2019-11-20 1d71d2a36ad11fd27223634cda8bd2229ef566bf
cache/cache.go
@@ -5,26 +5,29 @@
   "basic.com/pubsub/cache.git/shardmap"
   "basic.com/pubsub/protomsg.git"
   "basic.com/valib/gopherdiscovery.git"
   "basic.com/valib/logger.git"
   "encoding/json"
   "errors"
   "fmt"
   "github.com/gogo/protobuf/proto"
   "github.com/satori/go.uuid"
   "strconv"
)
const (
   PREFIX_CAMERA = "CAMERA_"
   PREFIX_CAMERA  = "CAMERA_"
   PREFIX_POLYGON = "POLYGON_"
   PREFIX_TIME = "TIME_"
   PREFIX_RULE = "RULE_"
   SERVER_KEY = "SERVERINFO"
   PREFIX_SDK = "SDK_"
   PREFIX_SO = "SO"
   PREFIX_TIME    = "TIME_"
   PREFIX_RULE    = "RULE_"
   SERVER_KEY     = "SERVERINFO"
   PREFIX_SDK     = "SDK_"
   PREFIX_DIC     = "DIC_"
   PREFIX_SO      = "SO"
)
var cMap *shardmap.ShardMap
func Init(initChan chan bool,dbIp string,surveyPort int,pubSubPort int){
func Init(initChan chan bool, dbIp string, surveyPort int, pubSubPort int) {
   cMap = shardmap.New(uint8(32))
   urlSurvey := "tcp://" + dbIp + ":" + strconv.Itoa(surveyPort)
   urlPubSub := "tcp://" + dbIp + ":" + strconv.Itoa(pubSubPort)
@@ -35,36 +38,38 @@
   initCacheData(initChan)
   peers, _ := client.Peers()
   for b := range peers{
      fmt.Println("peerMsg:",b)
   for b := range peers {
      fmt.Println("peerMsg:", b)
      updateData(b)
   }
}
func initCacheData(initChan chan bool) {
   initPolygons()//初始化摄像机多边形缓存
   initPolygons() //初始化摄像机多边形缓存
   initTimeRules()//初始化时间规则缓存
   initTimeRules() //初始化时间规则缓存
   initCameraTaskRules()//初始化摄像机任务规则缓存
   initCameraTaskRules() //初始化摄像机任务规则缓存
   initCamera()//初始化摄像机信息
   initCamera() //初始化摄像机信息
   initServerInfo()//初始化服务器配置信息
   initServerInfo() //初始化服务器配置信息
   initSdks() //初始化sdk列表信息
   initSoData()
   initDictionary() // 初始化字典
   initChan <- true
}
var newUpdateMsg = &protomsg.DbChangeMessage{}
func updateData(b []byte){
   if err :=proto.Unmarshal(b,newUpdateMsg);err !=nil{
      fmt.Println("dbChangeMsg unmarshal err:",err)
func updateData(b []byte) {
   if err := proto.Unmarshal(b, newUpdateMsg); err != nil {
      fmt.Println("dbChangeMsg unmarshal err:", err)
      return
   }
   switch newUpdateMsg.Table {
@@ -72,15 +77,15 @@
      initServerInfo()
   case protomsg.TableChanged_T_Camera:
      initCamera()
   case protomsg.TableChanged_T_CameraPolygon://更新摄像机多变形
   case protomsg.TableChanged_T_CameraPolygon: //更新摄像机多变形
      initPolygons()
   case protomsg.TableChanged_T_TimeRule://更新时间规则
   case protomsg.TableChanged_T_TimeRule: //更新时间规则
      initTimeRules()
   case protomsg.TableChanged_T_CameraTask://更新摄像机规则配置参数
   case protomsg.TableChanged_T_CameraTask: //更新摄像机规则配置参数
      initCameraTaskRules()
   case protomsg.TableChanged_T_CameraTaskArgs://更新摄像机规则配置参数
   case protomsg.TableChanged_T_CameraTaskArgs: //更新摄像机规则配置参数
      initCameraTaskRules()
   case protomsg.TableChanged_T_Sdk://更新sdk配置
   case protomsg.TableChanged_T_Sdk: //更新sdk配置
      initSdks()
   default:
      fmt.Println("unknown operation")
@@ -91,39 +96,39 @@
func initServerInfo() {
   var api dbapi.SysSetApi
   b, s := api.GetServerInfo()
   if b{
      cMap.Set(SERVER_KEY,s)
   if b {
      cMap.Set(SERVER_KEY, s)
   }
}
func initCamera() {
   var api dbapi.CameraApi
   cameras := api.FindAll()
   for _,cam := range cameras {
      cMap.Set(PREFIX_CAMERA + cam.Id,cam)
   for _, cam := range cameras {
      cMap.Set(PREFIX_CAMERA+cam.Id, cam)
   }
}
func initPolygons(){
func initPolygons() {
   var api dbapi.CameraApi
   data := api.FindAllPolygons()
   pMap :=make(map[string][]protomsg.CameraPolygon,0)
   pMap := make(map[string][]protomsg.CameraPolygon, 0)
   for _, item := range data {
      if item.Type != "line" {
         cameraId :=item.CameraId
         if _,ok :=pMap[cameraId];ok{
            pMap[cameraId] = append(pMap[cameraId],item)
         } else{
            pMap[cameraId]=[]protomsg.CameraPolygon{item}
         cameraId := item.CameraId
         if _, ok := pMap[cameraId]; ok {
            pMap[cameraId] = append(pMap[cameraId], item)
         } else {
            pMap[cameraId] = []protomsg.CameraPolygon{item}
         }
      }
   }
   for k,v :=range pMap{
      cMap.Set(PREFIX_POLYGON + k,v)
   for k, v := range pMap {
      cMap.Set(PREFIX_POLYGON+k, v)
   }
}
func initTimeRules(){
func initTimeRules() {
   var api dbapi.CameraApi
   flag, rules := api.FindAllTimeRules()
   if flag {
@@ -133,43 +138,59 @@
   }
}
func initCameraTaskRules(){
func initDictionary() {
   var api dbapi.DicApi
   flag, dics := api.FindByType("")
   if flag {
      var dicss map[string][]Dic
      b, _ := json.Marshal(dics)
      if err := json.Unmarshal(b, &dicss); err == nil {
         for key, dics1 := range dicss {
            for _, dic := range dics1 {
               cMap.Set(PREFIX_DIC + key + dic.Value, dic)
            }
         }
      }
   }
}
func initCameraTaskRules() {
   var api dbapi.CameraTaskArgsApi
   all := api.FindAll()
   for _, taskArg := range all {
      cMap.Set(PREFIX_RULE+taskArg.CameraId,taskArg.TaskArgs)
      cMap.Set(PREFIX_RULE+taskArg.CameraId, taskArg.TaskArgs)
   }
}
func initSdks(){
func initSdks() {
   var api dbapi.SdkApi
   sdks := api.FindAll("")
   for _,sdk :=range sdks {
      cMap.Set(PREFIX_SDK+sdk.Id,sdk)
   for _, sdk := range sdks {
      cMap.Set(PREFIX_SDK+sdk.Id, sdk)
   }
}
func GetServerInfo() (con protomsg.LocalConfig,err error) {
func GetServerInfo() (con protomsg.LocalConfig, err error) {
   config, b := cMap.Get(SERVER_KEY)
   if b {
      return config.(protomsg.LocalConfig),nil
      return config.(protomsg.LocalConfig), nil
   } else {
      return con,errors.New("conf not found")
      return con, errors.New("conf not found")
   }
}
//通过cameraId获取摄像机信息
func GetCameraById(cameraId string) (c protomsg.Camera,err error) {
func GetCameraById(cameraId string) (c protomsg.Camera, err error) {
   cam, b := cMap.Get(PREFIX_CAMERA + cameraId)
   if b {
      return cam.(protomsg.Camera),nil
      return cam.(protomsg.Camera), nil
   } else {
      return c,errors.New("camera not found")
      return c, errors.New("camera not found")
   }
}
func GetPolygonsByCameraId(cameraId string) []protomsg.CameraPolygon{
func GetPolygonsByCameraId(cameraId string) []protomsg.CameraPolygon {
   obj, b := cMap.Get(PREFIX_POLYGON + cameraId)
   if b {
      return obj.([]protomsg.CameraPolygon)
@@ -179,12 +200,12 @@
}
//从缓存中获取时间规则
func GetTimeRuleById(id string) (exist bool,rule protomsg.CameraTimerule){
func GetTimeRuleById(id string) (exist bool, rule protomsg.CameraTimerule) {
   obj, b := cMap.Get(PREFIX_TIME + id)
   if b {
      return true,obj.(protomsg.CameraTimerule)
      return true, obj.(protomsg.CameraTimerule)
   } else {
      return false,rule
      return false, rule
   }
}
@@ -198,28 +219,50 @@
   }
}
func GetSdkById(sdkId string) (sdk protomsg.Sdk,err error){
   obj,b :=cMap.Get(PREFIX_SDK + sdkId)
func GetSdkById(sdkId string) (sdk protomsg.Sdk, err error) {
   obj, b := cMap.Get(PREFIX_SDK + sdkId)
   if b {
      return obj.(protomsg.Sdk),nil
      return obj.(protomsg.Sdk), nil
   } else {
      return sdk,errors.New("sdk not found")
      return sdk, errors.New("sdk not found")
   }
}
// 获取字典值
func GetDic(key string) (name string) {
   obj, b := cMap.Get(PREFIX_DIC + key)
   if b {
      return obj.(Dic).Name
   } else {
      return ""
   }
}
func initSoData() {
   var api dbapi.SoApi
   soinfos := api.FindAll()
   for _,soinfo :=range soinfos {
      cMap.Set(PREFIX_SO+soinfo.SdkId,soinfo)
   logger.Debug("=====================注册表信息:")
   for _, soinfo := range soinfos {
      logger.Debug(soinfo)
      cMap.Set(PREFIX_SO+soinfo.SdkId, soinfo)
   }
}
func GetSoInfoById(sdkId string) (sdk protomsg.SoInfo,err error){
   obj,b :=cMap.Get(PREFIX_SO + sdkId)
func GetSoInfoById(sdkId string) (sdk protomsg.SoInfo, err error) {
   obj, b := cMap.Get(PREFIX_SO + sdkId)
   if b {
      return obj.(protomsg.SoInfo),nil
      return obj.(protomsg.SoInfo), nil
   } else {
      return sdk,errors.New("sdk not found")
      return sdk, errors.New("sdk not found")
   }
}
}
type Dic struct {
   Id          string `json:"id"`
   Value       string `json:"value"`
   Name        string `json:"name"`
   Type        string `json:"type"`
   Description string `json:"description"`
   Sort        int    `json:"sort"`
   Parent_id   string `json:"parent_id"`
}