From a6cecf4a41eaf57b71247121f7e53529cb85683b Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 19 十一月 2019 17:47:47 +0800
Subject: [PATCH] ---
---
cache/cache.go | 209 ++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 171 insertions(+), 38 deletions(-)
diff --git a/cache/cache.go b/cache/cache.go
index e1120c2..2706eb1 100644
--- a/cache/cache.go
+++ b/cache/cache.go
@@ -5,21 +5,30 @@
"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_POLYGON = "POLYGON_"
- PREFIX_TIME = "TIME_"
- PREFIX_RULE = "RULE_"
+ 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)
client, _ := gopherdiscovery.ClientWithSub(urlSurvey, urlPubSub, uuid.NewV4().String())
@@ -29,62 +38,97 @@
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() //鍒濆鍖栨憚鍍忔満淇℃伅
+
+ initServerInfo() //鍒濆鍖栨湇鍔″櫒閰嶇疆淇℃伅
+
+ initSdks() //鍒濆鍖杝dk鍒楄〃淇℃伅
+
+ 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 {
- case protomsg.TableChanged_T_CameraPolygon://鏇存柊鎽勫儚鏈哄鍙樺舰
+ case protomsg.TableChanged_T_Server:
+ initServerInfo()
+ case protomsg.TableChanged_T_Camera:
+ initCamera()
+ case protomsg.TableChanged_T_CameraPolygon: //鏇存柊鎽勫儚鏈哄鍙樺舰
initPolygons()
- case protomsg.TableChanged_T_TimeRule://鏇存柊鏃堕棿瑙勫垯
+ case protomsg.TableChanged_T_TimeRule: //鏇存柊鏃堕棿瑙勫垯
initTimeRules()
- case protomsg.TableChanged_T_CameraTaskArgs://鏇存柊鎽勫儚鏈鸿鍒欓厤缃弬鏁�
+ case protomsg.TableChanged_T_CameraTask: //鏇存柊鎽勫儚鏈鸿鍒欓厤缃弬鏁�
initCameraTaskRules()
+ case protomsg.TableChanged_T_CameraTaskArgs: //鏇存柊鎽勫儚鏈鸿鍒欓厤缃弬鏁�
+ initCameraTaskRules()
+ case protomsg.TableChanged_T_Sdk: //鏇存柊sdk閰嶇疆
+ initSdks()
default:
fmt.Println("unknown operation")
}
}
-func initPolygons(){
- var api dbapi.CameraApi
- data := api.FindAllPolygons()
- for _, item := range data {
- if item.Type != "line" {
- cameraId :=item.CameraId
- arr, b := cMap.Get(PREFIX_POLYGON + cameraId)
- if b {
- list := arr.([]protomsg.CameraPolygon)
- list = append(list,item)
- cMap.Set(PREFIX_POLYGON + cameraId,list)
- } else {
- cMap.Set(PREFIX_POLYGON + cameraId,[]protomsg.CameraPolygon{ item })
- }
- }
+func initServerInfo() {
+ var api dbapi.SysSetApi
+ b, s := api.GetServerInfo()
+ if b {
+ cMap.Set(SERVER_KEY, s)
}
}
-func initTimeRules(){
+func initCamera() {
+ var api dbapi.CameraApi
+ cameras := api.FindAll()
+ for _, cam := range cameras {
+ cMap.Set(PREFIX_CAMERA+cam.Id, cam)
+ }
+}
+
+func initPolygons() {
+ var api dbapi.CameraApi
+ data := api.FindAllPolygons()
+ 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}
+ }
+ }
+ }
+ for k, v := range pMap {
+ cMap.Set(PREFIX_POLYGON+k, v)
+ }
+}
+
+func initTimeRules() {
var api dbapi.CameraApi
flag, rules := api.FindAllTimeRules()
if flag {
@@ -94,18 +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() {
+ var api dbapi.SdkApi
+ sdks := api.FindAll("")
+ for _, sdk := range sdks {
+ cMap.Set(PREFIX_SDK+sdk.Id, sdk)
+ }
+}
+func GetServerInfo() (con protomsg.LocalConfig, err error) {
+ config, b := cMap.Get(SERVER_KEY)
+ if b {
+ return config.(protomsg.LocalConfig), nil
+ } else {
+ return con, errors.New("conf not found")
+ }
+}
-func GetPolygonsByCameraId(cameraId string) []protomsg.CameraPolygon{
+//閫氳繃cameraId鑾峰彇鎽勫儚鏈轰俊鎭�
+func GetCameraById(cameraId string) (c protomsg.Camera, err error) {
+ cam, b := cMap.Get(PREFIX_CAMERA + cameraId)
+ if b {
+ return cam.(protomsg.Camera), nil
+ } else {
+ return c, errors.New("camera not found")
+ }
+}
+
+func GetPolygonsByCameraId(cameraId string) []protomsg.CameraPolygon {
obj, b := cMap.Get(PREFIX_POLYGON + cameraId)
if b {
return obj.([]protomsg.CameraPolygon)
@@ -115,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
}
}
@@ -132,4 +217,52 @@
} else {
return nil
}
-}
\ No newline at end of file
+}
+
+func GetSdkById(sdkId string) (sdk protomsg.Sdk, err error) {
+ obj, b := cMap.Get(PREFIX_SDK + sdkId)
+ if b {
+ return obj.(protomsg.Sdk), nil
+ } else {
+ 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()
+ 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)
+ if b {
+ return obj.(protomsg.SoInfo), nil
+ } else {
+ 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"`
+}
--
Gitblit v1.8.0