From cc9d7e2dfad7c634e8ce69d02ce5fc4065e809e4 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期日, 25 四月 2021 11:34:47 +0800
Subject: [PATCH] 使用bhsgo  by  lichao

---
 syssetApi.go                |   61 +--
 fileAnalysis.go             |   43 --
 eventPush.go                |   21 -
 cameraRuleApi.go            |   36 --
 appApi.go                   |    6 
 chanmanageApi.go            |   15 
 cluster.go                  |   24 -
 voiceApi.go                 |    3 
 sysMenuApi.go               |    3 
 areaApi.go                  |   12 
 userApi.go                  |   15 
 clientFactory.go            |    8 
 dbtableApi.go               |   30 -
 cameraPolygonRelationApi.go |   12 
 timePgnApi.go               |   27 -
 gb28181Api.go               |   70 ----
 sysRoleApi.go               |    3 
 fileStack.go                |   27 -
 licenseApi.go               |    9 
 sdkApi.go                   |   21 -
 cameraApi.go                |   61 ---
 dbpersonApi.go              |   46 --
 client.go                   |   10 
 sbusClient.go               |  120 ++-----
 cameraGroupApi.go           |    6 
 deviceCtlApi.go             |  211 +++++++++++++
 dicApi.go                   |    9 
 27 files changed, 279 insertions(+), 630 deletions(-)

diff --git a/appApi.go b/appApi.go
index b08ec4f..bd0eb0e 100644
--- a/appApi.go
+++ b/appApi.go
@@ -13,9 +13,6 @@
 	url := DATA_URL_PREFIX + "/app/findAllApp"
 	netNode := getNetNode(url2Topic(Topic_AppCenter_Service, url))
 	logPrint("netNode:", netNode)
-	if netNode == nil {
-		return nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string, 0)
 	paramMap["appName"] = appName
@@ -42,9 +39,6 @@
 func (api AppApi) Save(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/app/save"
 	netNode := getNetNode(url2Topic(Topic_AppCenter_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON,paramBody,nil,nil)
 	if err != nil {
diff --git a/areaApi.go b/areaApi.go
index b61b18d..855dd39 100644
--- a/areaApi.go
+++ b/areaApi.go
@@ -14,9 +14,6 @@
 func (api AreaApi) GetLocalCameraTree(parentId string, searchType string, cameraName string) []TreeMenu {
 	url := DATA_URL_PREFIX + "/area/localmenu"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return nil
-	}
 	var result []TreeMenu
 
 	client := NewClient(WithNodes(netNode))
@@ -48,9 +45,6 @@
 func (api AreaApi) AreaAdd(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/area/add"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false
-	}
 	flag := false
 	client := NewClient(WithNodes(netNode))
 	respBody, err := client.DoPostRequest(url, CONTENT_TYPE_FORM, paramBody, nil, nil)
@@ -69,9 +63,6 @@
 func (api AreaApi) AreaUpdate(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/area/update"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false
-	}
 	flag := false
 	client := NewClient(WithNodes(netNode))
 
@@ -92,9 +83,6 @@
 func (api AreaApi) AreaDelete(id string) bool {
 	url := DATA_URL_PREFIX + "/area/del"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false
-	}
 	flag := false
 	if id == "" {
 		return flag
diff --git a/cameraApi.go b/cameraApi.go
index c5278c4..e8c1221 100644
--- a/cameraApi.go
+++ b/cameraApi.go
@@ -3,7 +3,6 @@
 import (
 	"basic.com/pubsub/protomsg.git"
 	"encoding/json"
-	"errors"
 	"strconv"
 )
 
@@ -14,9 +13,6 @@
 func (api CameraApi) CameraAdd(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/camera/add"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON,paramBody,nil,nil)
 	if err != nil {
@@ -33,9 +29,6 @@
 func (api CameraApi) CameraUpdate(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/camera/update"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPutRequest(url,CONTENT_TYPE_JSON,paramBody,nil)
 	if err != nil {
@@ -52,9 +45,6 @@
 func (api CameraApi) UpdateSnapshotUrl(cameraId string, snapshot string) bool {
 	url := DATA_URL_PREFIX + "/camera/updateSnapshot"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["snapshot"] = snapshot
@@ -76,9 +66,6 @@
 func (api CameraApi) CameraDelete(cid string) bool {
 	url := DATA_URL_PREFIX + "/camera/del"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string,0)
 	paramMap["id"] = cid
@@ -98,9 +85,6 @@
 func (api CameraApi) GetCameraById(cameraId string) (camera protomsg.Camera, err error) {
 	url := DATA_URL_PREFIX + "/camera/show"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return camera,errors.New("camera-service not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"id": cameraId,
@@ -124,9 +108,6 @@
 func (api CameraApi) UpdateCameraArea(cameraId string, areaId string) bool {
 	url := DATA_URL_PREFIX + "/camera/updateCameraArea"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false
-	}
     client := NewClient(WithNodes(netNode))
     paramBody := map[string]interface{} {
         "cameraId": cameraId,
@@ -148,9 +129,6 @@
 func (api CameraApi) FindAll(cameraName string, runType string, cameraId string, areaId string) (cameras []protomsg.Camera) {
 	url := DATA_URL_PREFIX + "/camera/showAll"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"cameraName": cameraName,
@@ -179,9 +157,6 @@
 func (api CameraApi) GetAllCamerasByServer(serverId string,cameraName string) (b bool,cams []protomsg.Camera) {
 	url := DATA_URL_PREFIX + "/camera/getAllCamerasByServer"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := make(map[string]string,0)
 	paramQuery["serverId"] = serverId
@@ -229,9 +204,6 @@
 func (api CameraApi) GetCamerasByRunType(runType int,cameraName string)(flag bool,cameras []protomsg.Camera){
 	url := DATA_URL_PREFIX + "/camera/getCamerasByRunType"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := make(map[string]string,2)
 	paramQuery["runType"]=strconv.Itoa(runType)
@@ -260,9 +232,6 @@
 func (api CameraApi) UpdateRunEnable(cameraId string,runEnable bool) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/camera/updateRunEnable"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false, nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["cameraId"] = cameraId
@@ -284,9 +253,6 @@
 func (api CameraApi) UpdateIsRunningState(cameraId string,isRunning bool) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/camera/updateIsRunningState"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["cameraId"] = cameraId
@@ -308,9 +274,6 @@
 func (api CameraApi) UpdateIsRunningAll(cameraIds []string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/camera/updateIsRunningAll"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["cameraIds"] = cameraIds
@@ -332,9 +295,6 @@
 func (api CameraApi) ChangeRunType(paramBody map[string]interface{}) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/camera/changeRunType"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -353,9 +313,6 @@
 func (api CameraApi) StatisticRunInfo() (bool,interface{}){
 	url := DATA_URL_PREFIX + "/camera/statisticRunInfo"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
@@ -372,9 +329,6 @@
 func (api CameraApi) FindAllCameraLink() (b bool,list []protomsg.CameraLink){
 	url := DATA_URL_PREFIX + "/camera/findAllCameraLink"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
@@ -395,9 +349,6 @@
 func (api CameraApi) FindOnMap(isOnMap bool, floor int, cameraName string) (b bool, cams []protomsg.Camera) {
 	url := DATA_URL_PREFIX + "/camera/findOnMap"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody:= map[string]interface{}{
 		"isOnMap":    isOnMap,
@@ -427,9 +378,6 @@
 func (api CameraApi) UpdatePos(id string, floor int, longitude float32, latitude float32) bool {
 	url := DATA_URL_PREFIX + "/camera/updatePos"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody:= map[string]interface{}{
 		"id":    id,
@@ -454,9 +402,6 @@
 func (api CameraApi) NodeCamera() (bool, interface{}) {
 	url := DATA_URL_PREFIX + "/camera/nodeCamera"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
@@ -473,9 +418,6 @@
 func (api CameraApi) Coord(cameraId string) (bool, interface{}) {
 	url := DATA_URL_PREFIX + "/camera/coord"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"cameraId": cameraId,
@@ -495,9 +437,6 @@
 func (api CameraApi) UpdateCoord(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/camera/updateCoord"
 	netNode := getNetNode(url2Topic(Topic_Camera_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
diff --git a/cameraGroupApi.go b/cameraGroupApi.go
index 4c006bf..f14d2d4 100644
--- a/cameraGroupApi.go
+++ b/cameraGroupApi.go
@@ -9,9 +9,6 @@
 func (api CameraGroupApi) FindAll() (flag bool,list interface{}) {
 	url := DATA_URL_PREFIX + "/camera/group/findAll"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
@@ -31,9 +28,6 @@
 func (api CameraGroupApi) Save(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/camera/group/save"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON,paramBody,nil,nil)
 	if err != nil {
diff --git a/cameraPolygonRelationApi.go b/cameraPolygonRelationApi.go
index a5a2b1e..09569d9 100644
--- a/cameraPolygonRelationApi.go
+++ b/cameraPolygonRelationApi.go
@@ -12,9 +12,6 @@
 func (api CameraPolygonRelationApi) FindAll() (flag bool,list []protomsg.CameraPolygonRelation) {
 	url := DATA_URL_PREFIX + "/polygon/relation/findAll"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
@@ -40,9 +37,6 @@
 func (api CameraPolygonRelationApi) Relations(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/polygon/relations"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON,paramBody,nil,nil)
 	if err != nil {
@@ -59,9 +53,6 @@
 func (api CameraPolygonRelationApi) SaveRelation(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/polygon/relation/save"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON,paramBody,nil,nil)
 	if err != nil {
@@ -78,9 +69,6 @@
 func (api CameraPolygonRelationApi) DelRelation(id string) bool {
 	url := DATA_URL_PREFIX + "/polygon/relation/del"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string,0)
 	paramMap["id"] = id
diff --git a/cameraRuleApi.go b/cameraRuleApi.go
index 1a1d39c..8e589d4 100644
--- a/cameraRuleApi.go
+++ b/cameraRuleApi.go
@@ -12,9 +12,6 @@
 func (api CameraRuleApi) FindByCameraId(cameraId string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/camera/rule/findByCameraId"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	param := map[string]string {
 		"cameraId": cameraId,
@@ -36,9 +33,6 @@
 func (api CameraRuleApi) Save(reqBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/camera/rule/save"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON, reqBody,nil,nil)
 	if err != nil {
@@ -57,9 +51,6 @@
 func (api CameraRuleApi) PasteRules(reqBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/camera/pasteRules"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON, reqBody,nil,nil)
 	if err != nil {
@@ -78,9 +69,6 @@
 func (api CameraRuleApi) SaveLinkRulesByGroup(reqBody map[string]interface{}) (bool, interface{}) {
 	url := DATA_URL_PREFIX + "/camera/rule/saveLinkRulesByGroup"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON, reqBody,nil,nil)
 	if err != nil {
@@ -99,9 +87,6 @@
 func (api CameraRuleApi) GetLinkRulesByCameraIds(reqBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/camera/rule/getLinkRulesByCameraIds"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON, reqBody,nil,nil)
 	if err != nil {
@@ -120,9 +105,6 @@
 func (api CameraRuleApi) UpdateAlarmLevel(reqBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/camera/rule/updateAlarmLevel"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPostRequest(url,CONTENT_TYPE_JSON, reqBody,nil,nil)
 	if err != nil {
@@ -141,9 +123,6 @@
 func (api CameraRuleApi) DeleteByGroup(groupId string) bool {
 	url := DATA_URL_PREFIX + "/camera/rule/deleteGroup"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoDeleteRequest(url, CONTENT_TYPE_JSON, nil,nil)
 	if err != nil {
@@ -162,9 +141,6 @@
 func (api CameraRuleApi) FindAll() (flag bool,allRules []protomsg.CameraAndRules) {
 	url := DATA_URL_PREFIX + "/camera/rule/findAll"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil,nil)
 	if err != nil {
@@ -196,9 +172,6 @@
 func (api CameraRuleApi) FindAllTaskById(camId string) (flag bool, crs protomsg.CameraAndRules) {
 	url := DATA_URL_PREFIX + "/camera/rule/findAllTaskById"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,crs
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"cameraId": camId,
@@ -233,9 +206,6 @@
 func (api CameraRuleApi) ExistRunningTask(camId string) bool {
 	url := DATA_URL_PREFIX + "/camera/rule/existRunningTask"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"cameraId": camId,
@@ -264,9 +234,6 @@
 func (api CameraRuleApi) FindAllCameraLink() (b bool, list []protomsg.CameraLink) {
 	url := DATA_URL_PREFIX + "/camera/findAllCameraLink"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false, nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil,nil)
 	if err != nil {
@@ -299,9 +266,6 @@
 func (api CameraRuleApi) FindLinksByCameraIds(camIds []string) (b bool,linkList []protomsg.CameraLink) {
 	url := DATA_URL_PREFIX + "/camera/rule/findLinksByCameraIds"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false, nil
-	}
 	client := NewClient(WithNodes(netNode))
 	reqBody := map[string]interface{}{
 		"cameraIds": camIds,
diff --git a/chanmanageApi.go b/chanmanageApi.go
index 6281c7e..3a031e6 100644
--- a/chanmanageApi.go
+++ b/chanmanageApi.go
@@ -13,9 +13,6 @@
 func (api ChanManageApi) SavePollPeriod(period int) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/pollConfig/savePollPeriod"
 	netNode := getNetNode(url2Topic(Topic_Chanmanage_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := make(map[string]interface{},0)
 	paramBody["period"] = period
@@ -36,9 +33,6 @@
 func (api ChanManageApi) SavePollDelay(delay int) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/pollConfig/savePollDelay"
 	netNode := getNetNode(url2Topic(Topic_Chanmanage_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := make(map[string]interface{},0)
 	paramBody["delay"] = delay
@@ -60,9 +54,6 @@
 func (api ChanManageApi) GetPollConfig() (flag bool,config protomsg.PollConfig) {
 	url := DATA_URL_PREFIX + "/pollConfig/getPollConfig"
 	netNode := getNetNode(url2Topic(Topic_Chanmanage_Service, url))
-	if netNode == nil {
-		return false,config
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, nil)
@@ -95,9 +86,6 @@
 func (api ChanManageApi) UpdatePollEnable(enable bool) bool{
 	url := DATA_URL_PREFIX + "/pollConfig/updateEnable"
 	netNode := getNetNode(url2Topic(Topic_Chanmanage_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["enable"] = enable
@@ -117,9 +105,6 @@
 func (api ChanManageApi) UpdateChannelCount(pollChannelCount int, videoChannelCount int) bool{
 	url := DATA_URL_PREFIX + "/pollConfig/updateChannelCount"
 	netNode := getNetNode(url2Topic(Topic_Chanmanage_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["pollChannelCount"] = pollChannelCount
diff --git a/client.go b/client.go
index 4c0b558..e4f4704 100644
--- a/client.go
+++ b/client.go
@@ -1,7 +1,7 @@
 package bhomedbapi
 
 import (
-	"basic.com/valib/bhomebus.git"
+	"basic.com/valib/bhshmq.git/proto/source/bhome_msg"
 	"errors"
 	"fmt"
 	"strconv"
@@ -44,21 +44,21 @@
 	}
 }
 
-var getNetNode = func(topic string) []bhomebus.NetNode{
+var getNetNode = func(topic string) []bhome_msg.BHAddress{
 	return nil
 }
 
-func InitGetNetNode(fn func(name string)[]bhomebus.NetNode) {
+func InitGetNetNode(fn func(name string)[]bhome_msg.BHAddress) {
 	if fn != nil {
 		getNetNode = fn
 	}
 }
 
-var busReq = func(req []byte,nodes []bhomebus.NetNode) ([]byte, error) {
+var busReq = func(req *bhome_msg.MsgRequestTopic,dest []bhome_msg.BHAddress) ([]byte, error) {
 	return nil, errors.New("please init InitDoReq first")
 }
 
-func InitDoReq(fn func([]byte, []bhomebus.NetNode) ([]byte, error)) {
+func InitDoReq(fn func(*bhome_msg.MsgRequestTopic, []bhome_msg.BHAddress) ([]byte, error)) {
 	if fn != nil {
 		busReq = fn
 	}
diff --git a/clientFactory.go b/clientFactory.go
index e0f0cd7..d154fca 100644
--- a/clientFactory.go
+++ b/clientFactory.go
@@ -1,6 +1,8 @@
 package bhomedbapi
 
-import "basic.com/valib/bhomebus.git"
+import (
+	"basic.com/valib/bhshmq.git/proto/source/bhome_msg"
+)
 
 //Factory new client
 func NewClient(opts ...IOption) Client {
@@ -14,7 +16,7 @@
 }
 
 type Option struct {
-	nodes []bhomebus.NetNode
+	nodes []bhome_msg.BHAddress
 }
 
 type IOption interface {
@@ -35,7 +37,7 @@
 	}
 }
 
-func WithNodes(nodeArr []bhomebus.NetNode) IOption {
+func WithNodes(nodeArr []bhome_msg.BHAddress) IOption {
 	return newFuncOption(func(o *Option) {
 		o.nodes = nodeArr
 	})
diff --git a/cluster.go b/cluster.go
index 6ad3258..0a9cffe 100644
--- a/cluster.go
+++ b/cluster.go
@@ -12,9 +12,6 @@
 func (api ClusterApi) FindCluster() (flag bool,info protomsg.ClusterAndNodes) {
 	url := DATA_URL_PREFIX + "/cluster/findCluster"
 	netNode := getNetNode(url2Topic(Topic_System_Service,url))
-	if netNode == nil {
-		return false,info
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoGetRequest(url, nil,nil)
 	if err != nil {
@@ -44,9 +41,6 @@
 func (api ClusterApi) Create(clusterName string, password string, virtualIp string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/cluster/create"
 	netNode := getNetNode(url2Topic(Topic_System_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"clusterName": clusterName,
@@ -69,9 +63,6 @@
 func (api ClusterApi) Search(searchNum string, password string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/cluster/search"
 	netNode := getNetNode(url2Topic(Topic_System_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"searchNum": searchNum,
@@ -93,9 +84,6 @@
 func (api ClusterApi) GetSearchNodes() (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/cluster/getSearchNodes"
 	netNode := getNetNode(url2Topic(Topic_System_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoGetRequest(url, nil,nil)
 	if err != nil {
@@ -113,9 +101,6 @@
 func (api ClusterApi) StopSearching(searchNum string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/cluster/stopSearching"
 	netNode := getNetNode(url2Topic(Topic_System_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"searchNum": searchNum,
@@ -136,9 +121,6 @@
 func (api ClusterApi) UpdateClusterName(clusterName string, virtualIp string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/cluster/updateClusterName"
 	netNode := getNetNode(url2Topic(Topic_System_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"clusterName": clusterName,
@@ -160,9 +142,6 @@
 func (api ClusterApi) Leave() (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/cluster/leave"
 	netNode := getNetNode(url2Topic(Topic_System_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_FORM, nil,nil,nil)
 	if err != nil {
@@ -181,9 +160,6 @@
 func (api ClusterApi) JoinCluster(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/cluster/joinCluster"
 	netNode := getNetNode(url2Topic(Topic_System_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
diff --git a/dbpersonApi.go b/dbpersonApi.go
index ae34cba..67eac00 100644
--- a/dbpersonApi.go
+++ b/dbpersonApi.go
@@ -3,7 +3,6 @@
 import (
 	"basic.com/pubsub/protomsg.git"
 	"encoding/json"
-	"errors"
 	"strconv"
 )
 
@@ -14,9 +13,6 @@
 func (api DbPersonApi) QueryDbPersonsByTbId(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/queryDbPersonsByTbId"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -34,9 +30,6 @@
 func (api DbPersonApi) UpdateDbPerson(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/updateDbPerson"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -54,9 +47,6 @@
 func (api DbPersonApi) UpdateFace(id string,faceFeature string, pic string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/updateFace"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"id": id,
@@ -79,9 +69,6 @@
 func (api DbPersonApi) AddDbPerson(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/addDbPerson"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, paramBody,nil)
 	if err != nil {
@@ -99,9 +86,6 @@
 func (api DbPersonApi) DeleteDbPerson(id string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/deleteDbPersonById"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"id": id,
@@ -122,9 +106,6 @@
 func (api DbPersonApi) DeleteMoreDbPerson(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/deleteMoreDbPerson"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -142,9 +123,6 @@
 func (api DbPersonApi) DeletePersonsByTbId(tableId string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/deletePersonsByTbId"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"tableId": tableId,
@@ -166,9 +144,6 @@
 func (api DbPersonApi) Dbpersoninfosbyid (ids []string) (persons []protomsg.Dbperson,err error) {
 	url := DATA_URL_PREFIX + "/dbperson/dbPersonInfoByIds"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return nil,errors.New("compTable-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"ids": ids,
@@ -192,9 +167,6 @@
 func (api DbPersonApi) GetPersonTotal (tableId string) (total int64,err error) {
 	url := DATA_URL_PREFIX + "/dbperson/getPersonTotal"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return -1,errors.New("compTable-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]string{
 		"tableId": tableId,
@@ -215,9 +187,6 @@
 func (api DbPersonApi) GetPersonsCompareCacheBase (from int,size int) (persons []*protomsg.Esinfo,err error) {
 	url := DATA_URL_PREFIX + "/dbperson/getPersonsCompareCacheBase"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return nil,errors.New("compTable-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]string{
 		"from": strconv.Itoa(from),
@@ -254,9 +223,6 @@
 func (api DbPersonApi) FindLikePersonIds (tableIds  []string,inputValue string) (interface{},error) {
 	url := DATA_URL_PREFIX + "/dbperson/findLikePersonIds"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return nil,errors.New("compTable-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"tableIds": tableIds,
@@ -277,9 +243,6 @@
 func (api DbPersonApi) JoinDbTable (tableIds  []string,faceFeature string, personPicUrl string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/joinDbTable"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"tableIds": tableIds,
@@ -301,9 +264,6 @@
 func (api DbPersonApi) Move (personId string,tableIds []string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/move"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"personId": personId,
@@ -324,9 +284,6 @@
 func (api DbPersonApi) Copy (personId string,tableIds []string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbperson/copy"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"personId": personId,
@@ -347,9 +304,6 @@
 func (api DbPersonApi) MultiUploadCarNo(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/dbperson/multiUploadCarNo"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
diff --git a/dbtableApi.go b/dbtableApi.go
index 9c41639..ba6b8c9 100644
--- a/dbtableApi.go
+++ b/dbtableApi.go
@@ -13,9 +13,6 @@
 func (api DbTableApi) AddDbTableInfo(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbtable/addDbTableInfo"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, paramBody,nil)
 	if err != nil {
@@ -33,9 +30,6 @@
 func (api DbTableApi) QueryDbTables(isSync string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbtable/queryDbTables"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery:= map[string]string {
 		"isSync":isSync,
@@ -56,9 +50,6 @@
 func (api DbTableApi) UpdateDbTables(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbtable/updateDbTables"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -76,9 +67,6 @@
 func (api DbTableApi) UpdateDbTableStatus(id string,enable int) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbtable/updateDbTableStatus"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"id": id,
@@ -100,9 +88,6 @@
 func (api DbTableApi) DeleteById(id string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dbtable/deleteDBtablesById"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"id": id,
@@ -124,9 +109,6 @@
 func (api DbTableApi) DbtablesById(ids []string) (dts []protomsg.Dbtable,err error) {
 	url := DATA_URL_PREFIX + "/dbtable/dbtablesByIds"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return nil,errors.New("compTable-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"ids": ids,
@@ -162,9 +144,6 @@
 func (api DbTableApi) FindAllDbTables() (dts []protomsg.Dbtable,err error) {
 	url := DATA_URL_PREFIX + "/dbtable/findAllDbTables"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return nil,errors.New("compTable-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoGetRequest(url, nil,nil)
 	if err != nil {
@@ -185,9 +164,6 @@
 func (api DbTableApi) FindAllDbTablesByCurServer(isDelete string) (dts []protomsg.Dbtable,err error){
 	url := DATA_URL_PREFIX + "/dbtable/findAllDbTablesByCurServer"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return nil,errors.New("compTable-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string{
 		"isDelete":isDelete,
@@ -211,9 +187,6 @@
 func (api DbTableApi) FindAllDbTablesByType(isDelete string, typ string) (dts []protomsg.Dbtable,err error){
 	url := DATA_URL_PREFIX + "/dbtable/findAllDbTablesByCurServer"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return nil,errors.New("compTable-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string{
 		"isDelete":isDelete,
@@ -238,9 +211,6 @@
 func (api DbTableApi) FindAllLocalDbTables(isDelete string) (dts []protomsg.Dbtable,err error){
 	url := DATA_URL_PREFIX + "/dbtable/findAllLocalDbTables"
 	netNode := getNetNode(url2Topic(Topic_CompTable_Service,url))
-	if netNode == nil {
-		return nil,errors.New("compTable-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string{
 		"isDelete":isDelete,
diff --git a/deviceCtlApi.go b/deviceCtlApi.go
new file mode 100644
index 0000000..0f9438a
--- /dev/null
+++ b/deviceCtlApi.go
@@ -0,0 +1,211 @@
+package bhomedbapi
+
+import (
+	"basic.com/valib/bhshmq.git/proto/source/bhome_msg"
+	"encoding/json"
+)
+
+type DeviceCtlApi struct {
+
+}
+
+func (api DeviceCtlApi) DevAuthApply(paramBody map[string]interface{}) (bool,interface{}) {
+	url := DATA_URL_PREFIX + "/devAuth/apply"
+	netNode := getNetNode(url2Topic(Topic_System_Service,url))
+
+	client := NewClient(WithNodes(netNode))
+	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, paramBody,nil)
+	if err != nil {
+		return false,nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false,nil
+	}
+
+	return res.Success,res.Data
+}
+
+func (api DeviceCtlApi) DevDetail(paramBody map[string]interface{}) (bool, interface{}) {
+	url := DATA_URL_PREFIX + "/device/detail"
+	netNode := getNetNode(url2Topic(Topic_System_Service,url))
+
+	client := NewClient(WithNodes(netNode))
+	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, paramBody,nil)
+	if err != nil {
+		return false,nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false,nil
+	}
+
+	return res.Success,res.Data
+}
+
+//鎺у埗鍏朵粬鑺傜偣鍒涘缓闆嗙兢
+func (api DeviceCtlApi) RemoteCreateCluster(devId string, ip string, paramBody map[string]interface{}) (bool, interface{}) {
+	url := DATA_URL_PREFIX + "/cluster/createCluster"
+	netNode := append([]bhome_msg.BHAddress{}, bhome_msg.BHAddress{
+		Ip: []byte(ip),
+
+	})
+
+	client := NewClient(WithNodes(netNode))
+
+	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, paramBody,nil)
+	if err != nil {
+		return false,nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false,nil
+	}
+
+	return res.Success,res.Data
+}
+
+//鎺у埗鍏朵粬鑺傜偣鎼滅储闆嗙兢
+func (api DeviceCtlApi) RemoteSearchCluster(devId string, ip string, paramBody map[string]interface{}) (bool, interface{}) {
+	url := DATA_URL_PREFIX + "/cluster/search"
+	netNode := append([]bhome_msg.BHAddress{}, bhome_msg.BHAddress{
+		Ip: []byte(ip),
+
+	})
+
+	client := NewClient(WithNodes(netNode))
+
+	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, paramBody,nil)
+	if err != nil {
+		return false,nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false,nil
+	}
+
+	return res.Success,res.Data
+}
+
+//鑾峰彇杩滅▼璁惧鎼滅储鍒伴泦缇よ妭鐐瑰垪琛�
+func (api DeviceCtlApi) RemoteGetSearchNodes(devId string, ip string, paramBody map[string]interface{}) (bool, interface{}) {
+	url := DATA_URL_PREFIX + "/cluster/getSearchNodes"
+	netNode := append([]bhome_msg.BHAddress{}, bhome_msg.BHAddress{
+		Ip: []byte(ip),
+
+	})
+
+	client := NewClient(WithNodes(netNode))
+
+	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, paramBody,nil)
+	if err != nil {
+		return false,nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false,nil
+	}
+
+	return res.Success,res.Data
+}
+
+//鎺у埗鍏朵粬鑺傜偣璁惧鍔犲叆闆嗙兢
+func (api DeviceCtlApi) RemoteJoinCluster(devId string, ip string, paramBody map[string]interface{}) (bool, interface{}) {
+	url := DATA_URL_PREFIX + "/cluster/joinCluster"
+	netNode := append([]bhome_msg.BHAddress{}, bhome_msg.BHAddress{
+		Ip: []byte(ip),
+
+	})
+
+	client := NewClient(WithNodes(netNode))
+
+	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, paramBody,nil)
+	if err != nil {
+		return false,nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false,nil
+	}
+
+	return res.Success,res.Data
+}
+
+//杩滅▼鎺у埗璁惧閲嶅惎
+func (api DeviceCtlApi) RemoteReboot(devId string, ip string) (bool, interface{}) {
+	url := DATA_URL_PREFIX + "/sysset/reboot"
+	netNode := append([]bhome_msg.BHAddress{}, bhome_msg.BHAddress{
+		Ip: []byte(ip),
+
+	})
+
+	client := NewClient(WithNodes(netNode))
+	paramBody := map[string]interface{} {
+
+	}
+	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, paramBody,nil)
+	if err != nil {
+		return false,nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false,nil
+	}
+
+	return res.Success,res.Data
+}
+
+//杩滅▼鎺у埗绠楁硶鎴栧簲鐢ㄥ嵏杞�
+func (api DeviceCtlApi) RemoteUninstall(devId string, ip string, id string) (bool, interface{}) {
+	url := DATA_URL_PREFIX + "/sdk/remoteUninstall"
+	netNode := append([]bhome_msg.BHAddress{}, bhome_msg.BHAddress{
+		Ip: []byte(ip),
+
+	})
+
+	client := NewClient(WithNodes(netNode))
+	paramBody := map[string]interface{} {
+		"id": id,
+	}
+	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody, nil,nil)
+	if err != nil {
+		return false,nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false,nil
+	}
+
+	return res.Success,res.Data
+}
+
+//杩滅▼鎺у埗璁惧绯荤粺鏇存柊
+func (api DeviceCtlApi) RemoteSysUpdate(devId string, ip string) (bool, interface{}) {
+	url := DATA_URL_PREFIX + "/sysset/remoteSysUpdate"
+	netNode := append([]bhome_msg.BHAddress{}, bhome_msg.BHAddress{
+		Ip: []byte(ip),
+
+	})
+	client := NewClient(WithNodes(netNode))
+
+	body,err := client.DoPutRequest(url,CONTENT_TYPE_JSON, nil,nil)
+	if err != nil {
+		return false,nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false,nil
+	}
+
+	return res.Success,res.Data
+}
+
diff --git a/dicApi.go b/dicApi.go
index f4f9d19..72563c3 100644
--- a/dicApi.go
+++ b/dicApi.go
@@ -12,9 +12,6 @@
 func (api DicApi) FindByType(dicType string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/dictionary/findByType"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string)
 	paramMap["type"] = dicType
@@ -33,9 +30,6 @@
 func (api DicApi) FindByParentId(parentId string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/dictionary/findByParentId"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string)
 	paramMap["parentId"] = parentId
@@ -54,9 +48,6 @@
 func (api DicApi) ListByType(typ string) (flag bool,list []protomsg.Dic){
 	url := DATA_URL_PREFIX + "/dictionary/listByType"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string)
 	paramMap["type"] = typ
diff --git a/eventPush.go b/eventPush.go
index 49f0c7a..1745962 100644
--- a/eventPush.go
+++ b/eventPush.go
@@ -12,9 +12,6 @@
 func (api EventPushApi) Save(paramBody map[string]interface{}) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/eventPush/save"
 	netNode := getNetNode(url2Topic(Topic_EventPush_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -33,9 +30,6 @@
 func (api EventPushApi) FindByEventTopic(topic string,childType string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/eventPush/findByEventTopic"
 	netNode := getNetNode(url2Topic(Topic_EventPush_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery :=make(map[string]string,0)
 	paramQuery["topic"] = topic
@@ -55,9 +49,6 @@
 func (api EventPushApi) FindAll(name string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/eventPush/findAll"
 	netNode := getNetNode(url2Topic(Topic_EventPush_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery :=make(map[string]string,0)
 	paramQuery["name"] = name
@@ -76,9 +67,6 @@
 func (api EventPushApi) FindAllDetails() (b bool,allRules []protomsg.EventPush){
 	url := DATA_URL_PREFIX + "/eventPush/findAllDetails"
 	netNode := getNetNode(url2Topic(Topic_EventPush_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
@@ -101,9 +89,6 @@
 func (api EventPushApi) GetById(id string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/eventPush/getById"
 	netNode := getNetNode(url2Topic(Topic_EventPush_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery :=make(map[string]string,0)
 	paramQuery["id"] = id
@@ -122,9 +107,6 @@
 func (api EventPushApi) ChangeStatus(id string,enable bool) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/eventPush/changeStatus"
 	netNode := getNetNode(url2Topic(Topic_EventPush_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["id"] = id
@@ -144,9 +126,6 @@
 func (api EventPushApi) Delete(id string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/eventPush/delete"
 	netNode := getNetNode(url2Topic(Topic_EventPush_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramForm :=make(map[string]interface{},0)
 	paramForm["id"] = id
diff --git a/fileAnalysis.go b/fileAnalysis.go
index 20ac35e..73fb0c4 100644
--- a/fileAnalysis.go
+++ b/fileAnalysis.go
@@ -3,7 +3,6 @@
 import (
 	"basic.com/pubsub/protomsg.git"
 	"encoding/json"
-	"errors"
 	"strconv"
 )
 
@@ -14,9 +13,6 @@
 func (api FileAnalysisApi) Save(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/fileAnalysis/save"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -34,9 +30,6 @@
 func (api FileAnalysisApi) Show(id string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/fileAnalysis/show"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"id":id,
@@ -57,9 +50,6 @@
 func (api FileAnalysisApi) FindAllFile(fileName string,fType int, page int, size int) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/fileAnalysis/findAllFile"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"fileName": fileName,
@@ -83,9 +73,6 @@
 func (api FileAnalysisApi) GetAnalysisFiles() (files []protomsg.FileAnalysis,err error){
 	url := DATA_URL_PREFIX + "/fileAnalysis/getAnalysisFiles"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return nil,errors.New("stack-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, nil)
@@ -107,9 +94,6 @@
 func (api FileAnalysisApi) FindByStackId(stackId string, typ int,name string, page int, size int) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/fileAnalysis/findByStackId"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]string {
 		"stackId": stackId,
@@ -136,9 +120,6 @@
 func (api FileAnalysisApi) GetFileAnalysisSet() (set protomsg.FileAnalysisSetting,err error) {
 	url := DATA_URL_PREFIX + "/fileSetting/show"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return set,errors.New("stack-service proc not found")
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, nil)
@@ -160,9 +141,6 @@
 func (api FileAnalysisApi) UpdateProgress(ids []string, progress int) bool {
 	url := DATA_URL_PREFIX + "/fileAnalysis/updateProgress"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"ids":ids,
@@ -185,9 +163,6 @@
 func (api FileAnalysisApi) ChangeEnable(enable bool) bool {
 	url := DATA_URL_PREFIX + "/fileSetting/changeEnable"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"enable":enable,
@@ -209,9 +184,6 @@
 func (api FileAnalysisApi) UpdateStatus(idArr []string, status int) bool {
 	url := DATA_URL_PREFIX + "/fileAnalysis/updateStatus"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"ids":idArr,
@@ -234,9 +206,6 @@
 func (api FileAnalysisApi) Delete(idArr []string) bool {
 	url := DATA_URL_PREFIX + "/fileAnalysis/delete"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"ids":idArr,
@@ -258,9 +227,6 @@
 func (api FileAnalysisApi) SortFile(id string,direct int) bool {
 	url := DATA_URL_PREFIX + "/fileAnalysis/sortFile"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"id": id,
@@ -283,9 +249,6 @@
 func (api FileAnalysisApi) Rename(id string,name string) bool {
 	url := DATA_URL_PREFIX + "/fileAnalysis/rename"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"id": id,
@@ -308,9 +271,6 @@
 func (api FileAnalysisApi) Move(id string,stackId string) bool {
 	url := DATA_URL_PREFIX + "/fileAnalysis/move"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"id": id,
@@ -333,9 +293,6 @@
 func (api FileAnalysisApi) Copy(id string,stackIds []string) bool {
 	url := DATA_URL_PREFIX + "/fileAnalysis/copy"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"id": id,
diff --git a/fileStack.go b/fileStack.go
index 8b7611f..4ccd4c8 100644
--- a/fileStack.go
+++ b/fileStack.go
@@ -13,9 +13,6 @@
 func (api FileStackApi) Save(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/fileStack/save"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -34,9 +31,6 @@
 func (api FileStackApi) Show(id string) (b bool,sck protomsg.FileStack) {
 	url := DATA_URL_PREFIX + "/fileStack/show"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false,sck
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"id": id,
@@ -70,9 +64,6 @@
 func (api FileStackApi) FindAllByPage(name string,fType int, page int, size int) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/fileStack/findAllByPage"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"name": name,
@@ -97,9 +88,6 @@
 func (api FileStackApi) FindAllDoingStacks() (flag bool,stacks []protomsg.FileStack){
 	url := DATA_URL_PREFIX + "/fileStack/findAllDoingStacks"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, nil)
@@ -132,9 +120,6 @@
 func (api FileStackApi) ChangeEnable(id string,enable bool) bool {
 	url := DATA_URL_PREFIX + "/fileStack/changeEnable"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"id": id,
@@ -159,9 +144,6 @@
 func (api FileStackApi) Delete(id string) bool {
 	url := DATA_URL_PREFIX + "/fileStack/delete"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"id": id,
@@ -183,9 +165,6 @@
 func (api FileStackApi) UpdateStatus(idArr []string, status int) bool {
 	url := DATA_URL_PREFIX + "/fileStack/updateStatus"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"ids":idArr,
@@ -208,9 +187,6 @@
 func (api FileStackApi) UpdateChannelCount(count int) bool {
 	url := DATA_URL_PREFIX + "/fileSetting/updateChannelCount"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"channelCount":count,
@@ -232,9 +208,6 @@
 func (api FileStackApi) FindAll() (flag bool,stacks []protomsg.FileStack) {
 	url := DATA_URL_PREFIX + "/fileStack/findAll"
 	netNode := getNetNode(url2Topic(Topic_Stack_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, nil)
diff --git a/gb28181Api.go b/gb28181Api.go
index dc23192..cb018eb 100644
--- a/gb28181Api.go
+++ b/gb28181Api.go
@@ -3,7 +3,6 @@
 import (
 	"basic.com/pubsub/protomsg.git"
 	"encoding/json"
-	"errors"
 	"strconv"
 )
 
@@ -14,9 +13,6 @@
 //鍥芥爣閰嶇疆鏄剧ず
 func (api Gb28181Api) Show() (flag bool,gbConfig protomsg.Gb28181Config) {
 	netNode := getNetNode(Topic_Gb28181_Service)
-	if netNode == nil {
-		return false, gbConfig
-	}
 	url := DATA_URL_PREFIX + "/gb28181/configShow"
 	client := NewClient(WithNodes(netNode))
 	respBody, err := client.DoGetRequest(url, nil, nil)
@@ -40,9 +36,6 @@
 func (api Gb28181Api) Edit(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/gb28181/configEdit"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false
-	}
 	flag := false
 	client := NewClient(WithNodes(netNode))
 	respBody, err := client.DoPostRequest(url, CONTENT_TYPE_FORM, paramBody, nil, nil)
@@ -59,9 +52,6 @@
 func (api Gb28181Api) FindAreaByParentId(parentId string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/gb28181/findAreaByParentId"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service,url))
-	if netNode == nil {
-		return false, nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string, 0)
 	paramMap["parentId"] = parentId
@@ -79,9 +69,6 @@
 func (api Gb28181Api) NewGbId(code string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/gb28181/newGbId"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service,url))
-	if netNode == nil {
-		return false, nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string, 0)
 	paramMap["code"] = code
@@ -102,9 +89,6 @@
 func (api Gb28181Api) GetGb28181CameraTree(parentId string, searchType string, cameraName string) []TreeMenu {
 	url := DATA_URL_PREFIX + "/gb28181/tree"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service,url))
-	if netNode == nil {
-		return nil
-	}
 	var result []TreeMenu
 
 	client := NewClient(WithNodes(netNode))
@@ -135,9 +119,6 @@
 func (api Gb28181Api) Gb28181TreeRefresh(id string) bool {
 	url := DATA_URL_PREFIX + "/gb28181/treeRefresh"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false
-	}
 	flag := false
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
@@ -159,9 +140,6 @@
 func (api Gb28181Api) Gb28181TreeDelete() bool {
 	url := DATA_URL_PREFIX + "/gb28181/treeDelete"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false
-	}
 	flag := false
 	client := NewClient(WithNodes(netNode))
 	respBody, err := client.DoPostRequest(url, CONTENT_TYPE_FORM, nil, nil, nil)
@@ -180,9 +158,6 @@
 func (api Gb28181Api) GetAllCamerasByServer(serverId string,cameraName string) (b bool,cams []protomsg.Camera) {
 	url := DATA_URL_PREFIX + "/gb28181/getAllCamerasByServer"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service,url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := make(map[string]string,0)
 	paramQuery["serverId"] = serverId
@@ -207,9 +182,6 @@
 func (api Gb28181Api) FindOnMap(isOnMap bool, floor int, cameraName string) (b bool, cams []protomsg.Camera) {
 	url := DATA_URL_PREFIX + "/gb28181/camera/findOnMap"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody:= map[string]interface{}{
 		"isOnMap":    isOnMap,
@@ -240,9 +212,6 @@
 func (api Gb28181Api) UpdatePos(id string, floor int, longitude float32, latitude float32) bool {
 	url := DATA_URL_PREFIX + "/gb28181/camera/updatePos"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody:= map[string]interface{}{
 		"id":    id,
@@ -268,9 +237,6 @@
 func (api Gb28181Api) NodeCamera() (bool, interface{}) {
 	url := DATA_URL_PREFIX + "/gb28181/camera/nodeCamera"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
@@ -288,9 +254,6 @@
 func (api Gb28181Api) Coord(cameraId string) (bool, interface{}) {
 	url := DATA_URL_PREFIX + "/gb28181/camera/coord"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"cameraId": cameraId,
@@ -311,9 +274,6 @@
 func (api Gb28181Api) UpdateCoord(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/gb28181/camera/updateCoord"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -334,9 +294,6 @@
 func (api Gb28181Api) CameraUpdate(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/gb28181/camera/update"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoPutRequest(url,CONTENT_TYPE_JSON,paramBody,nil)
 	if err != nil {
@@ -353,9 +310,6 @@
 func (api Gb28181Api) UpdateSnapshotUrl(cameraId string, snapshot string) bool {
 	url := DATA_URL_PREFIX + "/gb28181/camera/updateSnapshot"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["snapshot"] = snapshot
@@ -378,9 +332,6 @@
 func (api Gb28181Api) GetCameraById(cameraId string) (camera protomsg.Camera, err error) {
 	url := DATA_URL_PREFIX + "/gb28181/camera/show"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return camera,errors.New("gb28181-service not found")
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"cid": cameraId,
@@ -404,9 +355,6 @@
 func (api Gb28181Api) UpdateCameraArea(cameraId string, areaId string) bool {
 	url := DATA_URL_PREFIX + "/gb28181/camera/updateCameraArea"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{} {
 		"cameraId": cameraId,
@@ -428,9 +376,6 @@
 func (api Gb28181Api) FindAll(cameraName string, runType string, cameraId string, areaId string) (cameras []protomsg.Camera) {
 	url := DATA_URL_PREFIX + "/gb28181/camera/showAll"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := map[string]string {
 		"cameraName": cameraName,
@@ -461,9 +406,6 @@
 func (api Gb28181Api) GetCamerasByRunType(runType int,cameraName string)(flag bool,cameras []protomsg.Camera){
 	url := DATA_URL_PREFIX + "/gb28181/camera/getCamerasByRunType"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := make(map[string]string,2)
 	paramQuery["runType"]=strconv.Itoa(runType)
@@ -492,9 +434,6 @@
 func (api Gb28181Api) UpdateRunEnable(cameraId string,runEnable bool) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/gb28181/camera/updateRunEnable"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false, nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["cameraId"] = cameraId
@@ -516,9 +455,6 @@
 func (api Gb28181Api) UpdateIsRunningState(cameraId string,isRunning bool) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/gb28181/camera/updateIsRunningState"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["cameraId"] = cameraId
@@ -540,9 +476,6 @@
 func (api Gb28181Api) UpdateIsRunningAll(cameraIds []string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/gb28181/camera/updateIsRunningAll"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["cameraIds"] = cameraIds
@@ -564,9 +497,6 @@
 func (api Gb28181Api) ChangeRunType(paramBody map[string]interface{}) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/gb28181/camera/changeRunType"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
diff --git a/licenseApi.go b/licenseApi.go
index afcbffd..ce355ef 100644
--- a/licenseApi.go
+++ b/licenseApi.go
@@ -12,9 +12,6 @@
 func (api LicenseApi) GetRegisterCode(paramBody map[string]interface{}) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/license/getRegisterCode"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
@@ -33,9 +30,6 @@
 func (api LicenseApi) Save(paramBody map[string]interface{}) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/license/save"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -53,9 +47,6 @@
 func (api LicenseApi) Show() (int,bool,interface{}){
 	url := DATA_URL_PREFIX + "/license/show"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return -1,false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
diff --git a/sbusClient.go b/sbusClient.go
index 39839f2..6d4471c 100644
--- a/sbusClient.go
+++ b/sbusClient.go
@@ -1,27 +1,21 @@
 package bhomedbapi
 
 import (
-	"basic.com/valib/bhomebus.git"
+	"basic.com/valib/bhshmq.git/api/bhsgo"
+	"basic.com/valib/bhshmq.git/proto/source/bhome_msg"
 	"encoding/json"
 	"errors"
 	"strconv"
 )
 
 type SBusClient struct {
-	nodes []bhomebus.NetNode
+	nodes []bhome_msg.BHAddress
 }
 
 type ProcInfo struct {
 	Name 			string 				`json:"name"` // 杩涚▼鍚嶇О
 	ID   			string 				`json:"id"`   // 杩涚▼鍞竴鏍囪瘑
 	Info 			string 				`json:"info"` // 杩涚▼鐨勬弿杩颁俊鎭紝鐢ㄤ簬鍖哄垎鍚屼竴杩涚▼鍚嶇О涓嬪涓繘绋�
-}
-
-type MsgInfo struct {
-	SrcProc  		ProcInfo   			`json:"srcProc"`    	// 婧愯繘绋嬪熀鏈俊鎭�
-	MsgType   		string 				`json:"msgType"`        // 鏁版嵁绫诲瀷锛屽彲涓鸿姹傘�佸彂甯冦�佽闃呫�佸簲绛旂瓑
-	Topic 			string				`json:"topic"`			//璇锋眰涓婚
-	Body 			[]byte				`json:"body"`			//璇锋眰鍐呭鎴栬�呭弽棣堢粨鏋�
 }
 
 type Request struct {
@@ -42,9 +36,6 @@
 }
 
 func (sc SBusClient) DoGetRequest(url string, params map[string]string, headers map[string]string) ([]byte, error) {
-	if sc.nodes == nil || len(sc.nodes) == 0 {
-		return nil, errors.New("invalid netNodes")
-	}
 
 	req := Request{
 		Path:        url,
@@ -57,23 +48,17 @@
 	if err !=nil {
 		return nil,err
 	}
-	rMsg := MsgInfo{
-		Topic: req.Path,
-		Body: rb,
-	}
-	rData, err := json.Marshal(rMsg)
-	if err != nil {
-		return nil, err
+	rMsg := bhome_msg.MsgRequestTopic{
+		Topic: []byte(req.Path),
+		Data: rb,
 	}
 
-	return busReq(rData, sc.nodes)
+	return busReq(&rMsg, sc.nodes)
 	//return doReq(req, sc.nodes)
 }
 
 func (sc SBusClient) DoPostRequest(url string, contentType string, body map[string]interface{}, params map[string]string, headers map[string]string) ([]byte, error) {
-	if sc.nodes == nil || len(sc.nodes) == 0 {
-		return nil, errors.New("invalid port")
-	}
+
 	req := Request{
 		Path:        url,
 		Method:      "POST",
@@ -113,22 +98,16 @@
 	if err !=nil {
 		return nil,err
 	}
-	rMsg := MsgInfo{
-		Topic: req.Path,
-		Body: rb,
-	}
-	rData, err := json.Marshal(rMsg)
-	if err != nil {
-		return nil, err
+	rMsg := bhome_msg.MsgRequestTopic{
+		Topic: []byte(req.Path),
+		Data: rb,
 	}
 
-	return busReq(rData, sc.nodes)
+	return busReq(&rMsg, sc.nodes)
 }
 
 func (sc SBusClient) DoPutRequest(url string, contentType string, body map[string]interface{}, headers map[string]string) ([]byte, error) {
-	if sc.nodes == nil || len(sc.nodes) == 0 {
-		return nil, errors.New("invalid port")
-	}
+
 	req := Request{
 		Path:        url,
 		Method:      "PUT",
@@ -140,22 +119,16 @@
 	if err !=nil {
 		return nil,err
 	}
-	rMsg := MsgInfo{
-		Topic: req.Path,
-		Body: rb,
-	}
-	rData, err := json.Marshal(rMsg)
-	if err != nil {
-		return nil, err
+	rMsg := bhome_msg.MsgRequestTopic{
+		Topic: []byte(req.Path),
+		Data: rb,
 	}
 
-	return busReq(rData, sc.nodes)
+	return busReq(&rMsg, sc.nodes)
 }
 
 func (sc SBusClient) DoDeleteRequest(url string, contentType string, body map[string]interface{}, headers map[string]string) ([]byte, error) {
-	if sc.nodes == nil || len(sc.nodes) == 0 {
-		return nil, errors.New("invalid port")
-	}
+
 	req := Request{
 		Path:        url,
 		Method:      "DELETE",
@@ -167,16 +140,12 @@
 	if err !=nil {
 		return nil,err
 	}
-	rMsg := MsgInfo{
-		Topic: req.Path,
-		Body: rb,
-	}
-	rData, err := json.Marshal(rMsg)
-	if err != nil {
-		return nil, err
+	rMsg := bhome_msg.MsgRequestTopic{
+		Topic: []byte(req.Path),
+		Data: rb,
 	}
 
-	return busReq(rData, sc.nodes)
+	return busReq(&rMsg, sc.nodes)
 }
 
 func fillParam(req *Request,headers map[string]string, params map[string]string, body map[string]interface{}) {
@@ -200,33 +169,22 @@
 	} else {
 		req.Body = b
 	}
-
 }
 
-//鍦ㄦ澶勪娇鐢∣penSocket浼氬湪Ctrl-C鐨勬椂鍊欙紝瀵艰嚧socket骞舵湭鎴愬姛Close锛屽叡浜唴瀛樺潡涓嶄細閲婃斁.
-//鎵�浠ユ帶鍒跺叡浜唴瀛樺潡鐨勬垚鍔熷洖鏀堕渶瑕佸湪涓婂眰鍋�,鐒跺悗璋僆nitDoReq灏嗗嚱鏁版寚閽堜紶閫掕繘鏉�
-//func doReq(req Request, nodes []bhomebus.NetNode) ([]byte,error) {
-//	rb, err := json.Marshal(req)
-//	if err !=nil {
-//		return nil,err
-//	}
-//	rMsg := MsgInfo{
-//		Topic: req.Path,
-//		Body: rb,
-//	}
-//	data, err := json.Marshal(rMsg)
-//	if err != nil {
-//		return nil, err
-//	}
-//	s := bhomebus.OpenSocket()
-//	defer s.Close()
-//	var ret []bhomebus.Mesg
-//	if n := s.SendandrecvTimeout(nodes, data, &ret, 5000);n == 0 {  //n==0琛ㄧず娌℃湁璇锋眰鎴愬姛
-//		return nil, fmt.Errorf("doReq s.SendandrecvTimeout result n:%d", n)
-//	} else {
-//		if len(ret) > 0 {
-//			return ret[0].Data, nil
-//		}
-//		return nil, fmt.Errorf("no any response")
-//	}
-//}
\ No newline at end of file
+/**
+* 鏂扮増bhs鐩存帴鍙戣捣璇锋眰锛屼笉浼氫骇鐢熷叡浜唴瀛樻硠婕忕殑闂锛�
+*/
+func doReq(req *bhome_msg.MsgRequestTopic, destArr []bhome_msg.BHAddress) ([]byte, error) {
+	dest := bhome_msg.BHAddress{}
+	if destArr != nil && len(destArr) > 0 {
+		dest = destArr[0]
+	}
+	pid := ""
+	r := bhome_msg.MsgRequestTopicReply{}
+	if bhsgo.Request(&dest, req, &pid, &r, 5000) {
+		return r.Data, nil
+	} else {
+		logPrint("bhsgo.Request request err:", r.Errmsg)
+		return nil, errors.New("bhsgo.Request return false")
+	}
+}
\ No newline at end of file
diff --git a/sdkApi.go b/sdkApi.go
index 3776e08..b913a46 100644
--- a/sdkApi.go
+++ b/sdkApi.go
@@ -13,9 +13,6 @@
 func (api SdkApi)Register(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/sdk/register"
 	netNode := getNetNode(url2Topic(Topic_AppCenter_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	flag := false
 	client := NewClient(WithNodes(netNode))
 	respBody, err := client.DoPostRequest(url, CONTENT_TYPE_JSON, paramBody, nil, nil)
@@ -34,9 +31,6 @@
 func (api SdkApi) FindAll(sdkName string)[]protomsg.Sdk{
 	url := DATA_URL_PREFIX + "/sdk/findAllSdk"
 	netNode := getNetNode(url2Topic(Topic_AppCenter_Service, url))
-	if netNode == nil {
-		return nil
-	}
 	var sdkArr []protomsg.Sdk
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string, 0)
@@ -109,9 +103,6 @@
 func (api SdkApi) GetById(id string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/sdk/getById"
 	netNode := getNetNode(Topic_AppCenter_Service)
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string)
 	paramMap["id"] = id
@@ -130,9 +121,6 @@
 func (api SdkApi) FindByTaskId(taskId string) (flag bool,sdks []protomsg.Sdk) {
 	url := DATA_URL_PREFIX + "/sdk/findByTaskId"
 	netNode := getNetNode(url2Topic(Topic_AppCenter_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string)
 	paramMap["taskId"] = taskId
@@ -153,9 +141,6 @@
 func (api SdkApi) GetSdkArgs(sdkId string, scope string) (b bool,args []protomsg.SdkArg) {
 	url := DATA_URL_PREFIX + "/sdkArg/getSdkArgs"
 	netNode := getNetNode(url2Topic(Topic_AppCenter_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramMap := make(map[string]string)
 	paramMap["sdkId"] = sdkId
@@ -177,9 +162,6 @@
 func (api SdkApi) GetAllSdkChanSet() (b bool, list []protomsg.SdkChanSet) {
 	url := DATA_URL_PREFIX + "/sdk/getAllSdkChanSet"
 	netNode := getNetNode(url2Topic(Topic_AppCenter_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
     client := NewClient(WithNodes(netNode))
     respBody,err := client.DoGetRequest(url, nil, nil)
     if err !=nil {
@@ -200,9 +182,6 @@
 func (api SdkApi) UpdateSdkChanSet(paramBody map[string]interface{}) bool {
 	url := DATA_URL_PREFIX + "/sdk/updateSdkChanSet"
 	netNode := getNetNode(url2Topic(Topic_AppCenter_Service, url))
-	if netNode == nil {
-		return false
-	}
     client := NewClient(WithNodes(netNode))
     respBody,err := client.DoPostRequest(url, CONTENT_TYPE_JSON, paramBody, nil, nil)
     if err !=nil {
diff --git a/sysMenuApi.go b/sysMenuApi.go
index cb53fd4..b751f56 100644
--- a/sysMenuApi.go
+++ b/sysMenuApi.go
@@ -11,9 +11,6 @@
 func (api SysMenuApi) MenuTree(userId string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/menu/tree"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	query := map[string]string{
 		"userId": userId,
diff --git a/sysRoleApi.go b/sysRoleApi.go
index 54ee7a5..46b21f5 100644
--- a/sysRoleApi.go
+++ b/sysRoleApi.go
@@ -11,9 +11,6 @@
 func (api SysRoleApi) FindAll() (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/role/findAll"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
diff --git a/syssetApi.go b/syssetApi.go
index 3194cba..88eb254 100644
--- a/syssetApi.go
+++ b/syssetApi.go
@@ -13,9 +13,6 @@
 func (api SysSetApi) GetServerInfo() (flag bool,sysconf protomsg.LocalConfig){
 	url := DATA_URL_PREFIX + "/sysset/getServerInfo"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,sysconf
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, nil)
@@ -44,9 +41,6 @@
 func (api SysSetApi) AlarmEdit(paramBody map[string]interface{}) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/sysset/alarmEdit"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -64,9 +58,6 @@
 func (api SysSetApi) VideoLenShow() (bool,interface{}){
 	url := DATA_URL_PREFIX + "/sysset/videoLenShow"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, nil)
@@ -84,9 +75,6 @@
 func (api SysSetApi) VideoLenEdit(maxVideoLen string,minVideoLen string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/sysset/videoLenEdit"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["max_video_len"] = maxVideoLen
@@ -107,9 +95,6 @@
 func (api SysSetApi) SaveServerInfo(paramBody map[string]interface{}) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/sysset/saveServerInfo"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_FORM, paramBody,nil,nil)
 	if err != nil {
@@ -127,9 +112,6 @@
 func (api SysSetApi) Gb28181ConfigShow() (bool,interface{}){
 	url := DATA_URL_PREFIX + "/sysset/gb28181ConfigShow"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, nil)
@@ -147,9 +129,6 @@
 func (api SysSetApi) Gb28181ConfigEdit(paramBody map[string]interface{}) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/sysset/gb28181ConfigEdit"
 	netNode := getNetNode(url2Topic(Topic_Gb28181_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -168,9 +147,6 @@
 func (api SysSetApi) GetRemoteFullServerInfo(headers map[string]string) (flag bool,d interface{}){
 	url := DATA_URL_PREFIX + "/sysset/getDevInfo"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, headers)
@@ -189,9 +165,6 @@
 func (api SysSetApi) GetClockInfo(headers map[string]string) (flag bool,d interface{}){
 	url := DATA_URL_PREFIX + "/sysset/clockInfo"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, headers)
@@ -210,9 +183,6 @@
 func (api SysSetApi) TestNTPServer(query map[string]string,headers map[string]string) (flag bool,d interface{}){
 	url := DATA_URL_PREFIX + "/sysset/ntpTest"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, query, headers)
@@ -231,9 +201,6 @@
 func (api SysSetApi) SetSysClock(paramBody map[string]interface{},headers map[string]string) (flag bool,d interface{}){
 	url := DATA_URL_PREFIX + "/sysset/updateClock"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoPostRequest(url, CONTENT_TYPE_JSON,paramBody,nil, headers)
@@ -252,9 +219,6 @@
 func (api SysSetApi) GetSysInfo(headers map[string]string) (flag bool,d interface{}){
 	url := DATA_URL_PREFIX + "/sysset/sysinfo"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, headers)
@@ -273,9 +237,6 @@
 func (api SysSetApi) GetResourceConfig() (flag bool,rc protomsg.ResourceConfig){
 	url := DATA_URL_PREFIX + "/sysset/getResourceConfig"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false, rc
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoGetRequest(url, nil, nil)
@@ -303,9 +264,6 @@
 func (api SysSetApi) SaveResourceConfig(paramBody map[string]interface{}) (flag bool,d interface{}){
 	url := DATA_URL_PREFIX + "/sysset/saveResourceConfig"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 
 	body, err := client.DoPostRequest(url, CONTENT_TYPE_JSON,paramBody,nil, nil)
@@ -319,4 +277,23 @@
 	}
 
 	return res.Success,res.Data
+}
+
+//鎺у埗鏈満reboot
+func (api SysSetApi) RebootOS() (bool,interface{}) {
+	url := DATA_URL_PREFIX + "/sysset/reboot"
+	netNode := getNetNode(url2Topic(Topic_System_Service, url))
+	client := NewClient(WithNodes(netNode))
+
+	body, err := client.DoPostRequest(url, CONTENT_TYPE_JSON,nil,nil, nil)
+	if err != nil {
+		return false, nil
+	}
+
+	var res Result
+	if err = json.Unmarshal(body, &res); err != nil {
+		return false, nil
+	}
+
+	return res.Success,res.Data
 }
\ No newline at end of file
diff --git a/timePgnApi.go b/timePgnApi.go
index 0145343..7390201 100644
--- a/timePgnApi.go
+++ b/timePgnApi.go
@@ -12,9 +12,6 @@
 func (api TimePgnApi) SaveCameraPolygon(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/polygon/save"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -33,9 +30,6 @@
 func (api TimePgnApi) DeleteCameraPolygon(id string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/polygon/delete"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := make(map[string]string,0)
 	paramQuery["id"]=id
@@ -54,9 +48,6 @@
 func (api TimePgnApi) FindAllPolygons() ([]protomsg.CameraPolygon) {
 	url := DATA_URL_PREFIX + "/polygon/findAll"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return nil
-	}
 	polygons := make([]protomsg.CameraPolygon,0)
 	client := NewClient(WithNodes(netNode))
 
@@ -80,9 +71,6 @@
 func (api TimePgnApi) FindPolygonsByCameraId(cameraId string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/polygon/findByCameraId"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := make(map[string]string,0)
 	paramQuery["cameraId"] = cameraId
@@ -102,9 +90,6 @@
 func (api TimePgnApi) SaveCameraTimerule(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/cameraTimerule/save"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body,err := client.DoPostRequest(url,CONTENT_TYPE_JSON, paramBody,nil,nil)
 	if err != nil {
@@ -123,9 +108,6 @@
 func (api TimePgnApi) DeleteCameraTimerule (id string) bool {
 	url := DATA_URL_PREFIX + "/cameraTimerule/delete"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery := make(map[string]string,0)
 	paramQuery["id"]=id
@@ -145,9 +127,6 @@
 func (api TimePgnApi) FindAllTimeRules() (flag bool,rules []protomsg.CameraTimerule) {
 	url := DATA_URL_PREFIX + "/cameraTimerule/findAll"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	body, err := client.DoGetRequest(url, nil, nil)
 	if err != nil {
@@ -168,9 +147,6 @@
 func (api TimePgnApi) UpdateDefenceStateByPolygonId(polygonId string,state string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/polygon/updateDefenceStateByPolygonId"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery :=make(map[string]string,0)
 	paramQuery["polygonId"] = polygonId
@@ -190,9 +166,6 @@
 func (api TimePgnApi) UpdateDefenceStateByCameraId(cameraId string,state string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/polygon/updateDefenceStateByCameraId"
 	netNode := getNetNode(url2Topic(Topic_Scene_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramQuery :=make(map[string]string,0)
 	paramQuery["cameraId"] = cameraId
diff --git a/userApi.go b/userApi.go
index 58bc42b..0dbd4a7 100644
--- a/userApi.go
+++ b/userApi.go
@@ -11,9 +11,6 @@
 func (api UserApi) Login(username string,password string) (bool,interface{}){
 	url := DATA_URL_PREFIX + "/user/login"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody :=make(map[string]interface{},0)
 	paramBody["username"]=username
@@ -32,9 +29,6 @@
 func (api UserApi) FindAllUser(curUserId string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/user/findAllUser"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	query := map[string]string {
 		"userId": curUserId,
@@ -54,9 +48,6 @@
 func (api UserApi) FindById(userId string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/user/findById"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"userId": userId,
@@ -75,9 +66,6 @@
 func (api UserApi) SaveAuth(paramBody map[string]interface{}) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/user/saveAuth"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	respBody, err := client.DoPostRequest(url, CONTENT_TYPE_JSON, paramBody,nil, nil)
 	if err != nil {
@@ -93,9 +81,6 @@
 func (api UserApi) UpdatePwd(userId string, oldPwd string, newPwd string) (bool,interface{}) {
 	url := DATA_URL_PREFIX + "/user/updatePwd"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	client := NewClient(WithNodes(netNode))
 	paramBody := map[string]interface{}{
 		"userId": userId,
diff --git a/voiceApi.go b/voiceApi.go
index 1483e7a..20caa3d 100644
--- a/voiceApi.go
+++ b/voiceApi.go
@@ -13,9 +13,6 @@
 func (api VoiceApi) FindAll() (bool, []protomsg.Voice) {
 	url := DATA_URL_PREFIX + "/voice/findAll"
 	netNode := getNetNode(url2Topic(Topic_System_Service, url))
-	if netNode == nil {
-		return false,nil
-	}
 	var voiceArr []protomsg.Voice
 	client := NewClient(WithNodes(netNode))
 	respBody, err := client.DoGetRequest(url, nil, nil)

--
Gitblit v1.8.0