From 01dfd9dc8de7b19f9dfa4284722e01bbd5837801 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期五, 19 一月 2024 09:10:30 +0800
Subject: [PATCH] replace json to json-iterator

---
 sbusClient.go |  173 +++++++++++++++++++++++----------------------------------
 1 files changed, 69 insertions(+), 104 deletions(-)

diff --git a/sbusClient.go b/sbusClient.go
index 39839f2..bf9c140 100644
--- a/sbusClient.go
+++ b/sbusClient.go
@@ -1,50 +1,41 @@
 package bhomedbapi
 
 import (
-	"basic.com/valib/bhomebus.git"
-	"encoding/json"
+	"basic.com/valib/c_bhomebus.git/api/bhsgo"
+	"basic.com/valib/c_bhomebus.git/proto/source/bhome_msg"
 	"errors"
+	jsoniter "github.com/json-iterator/go"
 	"strconv"
 )
 
 type SBusClient struct {
-	nodes []bhomebus.NetNode
+	nodes []*bhome_msg.MsgQueryTopicReply_BHNodeAddress
 }
 
 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"`			//璇锋眰鍐呭鎴栬�呭弽棣堢粨鏋�
+	Name string `json:"name"` // 杩涚▼鍚嶇О
+	ID   string `json:"id"`   // 杩涚▼鍞竴鏍囪瘑
+	Info string `json:"info"` // 杩涚▼鐨勬弿杩颁俊鎭紝鐢ㄤ簬鍖哄垎鍚屼竴杩涚▼鍚嶇О涓嬪涓繘绋�
 }
 
 type Request struct {
-	Path        			string              	`json:"path"`
-	Method      			string              	`json:"method"`
-	ContentType 			string              	`json:"contentType"`
-	HeaderMap   			map[string][]string 	`json:"headerMap"`
-	QueryMap    			map[string][]string 	`json:"queryMap"`
-	FormMap     			map[string][]string 	`json:"formMap"`
-	PostFormMap 			map[string][]string 	`json:"postFormMap"`
-	Body        			[]byte              	`json:"body"`
+	Path        string              `json:"path"`
+	Method      string              `json:"method"`
+	ContentType string              `json:"contentType"`
+	HeaderMap   map[string][]string `json:"headerMap"`
+	QueryMap    map[string][]string `json:"queryMap"`
+	FormMap     map[string][]string `json:"formMap"`
+	PostFormMap map[string][]string `json:"postFormMap"`
+	Body        []byte              `json:"body"`
 }
 
 type reply struct {
-	Success 			bool 						`json:"success"`
-	Msg 				string 						`json:"msg"`
-	Data 				interface{} 				`json:"data"`
+	Success bool        `json:"success"`
+	Msg     string      `json:"msg"`
+	Data    interface{} `json:"data"`
 }
 
 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,
@@ -53,27 +44,22 @@
 	}
 	fillParam(&req, headers, params, nil)
 
+	var json = jsoniter.ConfigCompatibleWithStandardLibrary
 	rb, err := json.Marshal(req)
-	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",
@@ -83,7 +69,8 @@
 	if contentType == CONTENT_TYPE_FORM || contentType == CONTENT_TYPE_MULFORM {
 		if body != nil {
 			req.PostFormMap = make(map[string][]string)
-			for k,v := range body {
+			req.FormMap = map[string][]string{}
+			for k, v := range body {
 				switch v.(type) {
 				case string:
 					req.FormMap[k] = []string{v.(string)}
@@ -101,6 +88,7 @@
 			}
 		}
 	} else if contentType == CONTENT_TYPE_JSON {
+		var json = jsoniter.ConfigCompatibleWithStandardLibrary
 		bs, err := json.Marshal(body)
 		if err != nil {
 			logPrint("fill json body err:", err)
@@ -109,26 +97,21 @@
 		}
 	}
 
+	var json = jsoniter.ConfigCompatibleWithStandardLibrary
 	rb, err := json.Marshal(req)
-	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",
@@ -136,26 +119,21 @@
 	}
 	fillParam(&req, headers, nil, body)
 
+	var json = jsoniter.ConfigCompatibleWithStandardLibrary
 	rb, err := json.Marshal(req)
-	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",
@@ -163,70 +141,57 @@
 	}
 	fillParam(&req, headers, nil, body)
 
+	var json = jsoniter.ConfigCompatibleWithStandardLibrary
 	rb, err := json.Marshal(req)
-	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{}) {
+func fillParam(req *Request, headers map[string]string, params map[string]string, body map[string]interface{}) {
 	headerMap := make(map[string][]string)
 	queryMap := make(map[string][]string)
 	if headers != nil {
-		for k,v := range headers {
+		for k, v := range headers {
 			headerMap[k] = []string{v}
 		}
 	}
 	if params != nil {
-		for k,v := range params {
+		for k, v := range params {
 			queryMap[k] = []string{v}
 		}
 	}
 	req.HeaderMap = headerMap
 	req.QueryMap = queryMap
+	var json = jsoniter.ConfigCompatibleWithStandardLibrary
 	b, err := json.Marshal(body)
 	if err != nil {
 		logPrint("marshal body err:", err)
 	} 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")
+	}
+}

--
Gitblit v1.8.0