From 0120491f6551545b19114de049713c7e928ebc01 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期三, 20 一月 2021 15:43:04 +0800
Subject: [PATCH] 去掉CommonReply,统一使用Reply结构,减少消息解封装

---
 message.go   |   18 +++---
 micronode.go |   61 ++++---------------
 hbusc.go     |   55 ++++++++++-------
 3 files changed, 55 insertions(+), 79 deletions(-)

diff --git a/hbusc.go b/hbusc.go
index 958d74e..5d50bef 100644
--- a/hbusc.go
+++ b/hbusc.go
@@ -156,22 +156,25 @@
 			var rMsg []bhomebus.Mesg
 			n := regSock.Sendandrecv(regAddr, msg, &rMsg) //n浠h〃鎴愬姛鍙戦�佺殑鑺傜偣鐨勪釜鏁�
 			if n == 1 && len(rMsg) == 1 {
-				var cr CommonReply
+				var cr Reply
 				if err = json.Unmarshal(rMsg[0].Data, &cr);err != nil {
 					handle.printLog("unmarshal regReply err:", err)
 					return nil, errors.New("unmarshal regReply err:"+err.Error())
 				} else {
-					if cr.Status == REPLY_SUCCESS {
-						var rr RegisterReply
-						if err = json.Unmarshal(cr.Body, &rr);err ==nil {
-							regR = &rr
-							break loop
+					if cr.Success {
+						if rpd,err := json.Marshal(cr.Data);err ==nil {
+							var rr RegisterReply
+							if err = json.Unmarshal(rpd, &rr); err == nil {
+								regR = &rr
+								break loop
+							} else {
+								handle.printLog("unmarshal RegisterReply err:", err)
+							}
 						} else {
-							handle.printLog("unmarshal RegisterReply err:", err)
+							handle.printLog("marshal cr.Data err:", err)
 						}
-
 					} else {
-						handle.printLog("cr.Status:", cr.Status, "Desc:", cr.Desc)
+						handle.printLog("cr:", cr)
 					}
 
 				}
@@ -388,31 +391,37 @@
 	var ret []bhomebus.Mesg
 	n := h.sockWorker.sock.SendandrecvTimeout(reqNetNode, reqD, &ret, h.conf.sendTimeOut)
 	if n > 0 {
-		var reply CommonReply
+		var reply Reply
 		err = json.Unmarshal(ret[0].Data, &reply)
 		if err != nil {
 			h.printLog("unmarshal err:", err)
 			return nil, err
 		}
 
-		if reply.Status == REPLY_SUCCESS {
-			err = json.Unmarshal(reply.Body, &nodes)
+		if reply.Success {
+			rd,err := json.Marshal(reply.Data)
 			if err == nil {
-				return nodes, nil
+				err = json.Unmarshal(rd, &nodes)
+				if err == nil {
+					return nodes, nil
+				} else {
+					h.printLog("unmarshal err:", err, "nodes:", nodes)
+					return nil, fmt.Errorf("unmarshal to nodes err:%s", err.Error())
+				}
 			} else {
-				h.printLog("unmarshal err:", err, "nodes:", nodes)
-				return nil, fmt.Errorf("unmarshal reply.Body err:%s", err.Error())
+				return nil, fmt.Errorf("marshal reply.Data err:%s", err.Error())
 			}
+
 		} else {
-			h.printLog("reply status:", reply.Status, "desc:", reply.Desc, "body:", string(reply.Body))
-			return nil, fmt.Errorf("REPLY STATUS:%d", reply.Status)
+			h.printLog("reply success:", reply.Success, "msg:", reply.Msg, "data:", reply.Data)
+			return nil, fmt.Errorf("REPLY msg:%s", reply.Msg)
 		}
 	} else {
 		return nil,	fmt.Errorf("GetNetNodeByTopic ret n:%d", n)
 	}
 }
 
-func (h *BHBus) Request(serverId string, req *MsgInfo, milliSecs int) (*MsgInfo, error) {
+func (h *BHBus) Request(serverId string, req *MsgInfo, milliSecs int) (*Reply, error) {
 	//1.棣栧厛闇�瑕侀�氳繃topic鎷垮埌鏈満瀵瑰簲鐨凬etNode
 	rNodes, err := h.GetNetNodeByTopic(serverId, &req.SrcProc, req.Topic)
 	h.printLog("topic", req.Topic, "rNodes:", rNodes, "err:", err)
@@ -431,7 +440,7 @@
 	h.printLog("Request n: ", n, " len(ret): ", len(ret))
 
 	if n > 0 && len(ret) > 0 {
-		var resp MsgInfo
+		var resp Reply
 		if err = json.Unmarshal(ret[0].Data, &resp); err == nil {
 			return &resp, nil
 		} else {
@@ -442,8 +451,8 @@
 	return nil, fmt.Errorf("request err")
 }
 
-func (h *BHBus) Reply(replyKey int, i MsgInfo) error {
-	data,err := json.Marshal(i)
+func (h *BHBus) Reply(replyKey int, i *Reply) error {
+	data,err := json.Marshal(*i)
 	if err != nil {
 		return err
 	}
@@ -473,7 +482,7 @@
 	return nil
 }
 
-func (h *BHBus) RequestCenter(req *MsgInfo) (*CommonReply, error) {
+func (h *BHBus) RequestCenter(req *MsgInfo) (*Reply, error) {
 	data, err := json.Marshal(*req)
 	if err != nil {
 		return nil, err
@@ -487,7 +496,7 @@
 	n := h.sockWorker.sock.SendandrecvTimeout(rNodes, data,&ret, h.conf.sendTimeOut)
 	h.printLog("requestCenter n:", n, "len(ret):", len(ret))
 	if n > 0 && len(ret) > 0{
-		var cr CommonReply
+		var cr Reply
 		if err = json.Unmarshal(ret[0].Data, &cr); err == nil {
 			return &cr, nil
 		} else {
diff --git a/message.go b/message.go
index aea3e7e..9ba85b9 100644
--- a/message.go
+++ b/message.go
@@ -19,15 +19,15 @@
 	TOPIC_QUERYPROC          string = "Topic_QueryProc"
 )
 
-const (
-	REPLY_SUCCESS int = 200
-	REPLY_FAILED int = 202
-)
-type CommonReply struct {
-	Status int    `json:"status"` // 璇锋眰鐘舵��,鐩墠鍙湁涓や釜,鎴愬姛杩斿洖200,澶辫触202
-	Desc   string `json:"desc"`   // 璇锋眰鐘舵�佺殑鎻忚堪,鎴愬姛"success",澶辫触杩斿洖澶辫触鍘熷洜,濡傚績璺虫湇鍔℃湭鍚姩
-	Body   []byte `json:"body"`   // 杩斿洖鍊肩殑鍏蜂綋鍐呭,鐢ㄦ埛绾﹀畾
-}
+//const (
+//	REPLY_SUCCESS int = 200
+//	REPLY_FAILED int = 202
+//)
+//type CommonReply struct {
+//	Status int    `json:"status"` // 璇锋眰鐘舵��,鐩墠鍙湁涓や釜,鎴愬姛杩斿洖200,澶辫触202
+//	Desc   string `json:"desc"`   // 璇锋眰鐘舵�佺殑鎻忚堪,鎴愬姛"success",澶辫触杩斿洖澶辫触鍘熷洜,濡傚績璺虫湇鍔℃湭鍚姩
+//	Body   []byte `json:"body"`   // 杩斿洖鍊肩殑鍏蜂綋鍐呭,鐢ㄦ埛绾﹀畾
+//}
 
 const (
 	NODE_ALIVE int = 0
diff --git a/micronode.go b/micronode.go
index 0b033db..03316b9 100644
--- a/micronode.go
+++ b/micronode.go
@@ -121,25 +121,7 @@
 		Body: rb,
 	}
 	ms.printLog("2:", time.Since(t))
-	t = time.Now()
-	mi,err := ms.handle.Request(serverId, msgR, milliSecs)
-	if mi == nil || err != nil {
-		return nil, err
-	}
-	ms.printLog("3:", time.Since(t))
-	t = time.Now()
-	ri := new(Reply)
-	err = json.Unmarshal(mi.Body, ri)
-	if err != nil {
-		ms.printLog("unmarshal mi.Body err:", err)
-		ri = &Reply{
-			Success: false,
-			Msg: "鏈嶅姟璇锋眰澶辫触",
-			Data: "鏈嶅姟璇锋眰澶辫触",
-		}
-	}
-	ms.printLog("4:", time.Since(t))
-	return ri, nil
+	return ms.handle.Request(serverId, msgR, milliSecs)
 }
 
 func (ms *MicroNode) RequestTopic(serverId string, request Request, milliSecs int) (*Reply,error) {
@@ -149,20 +131,7 @@
 		Body: rb,
 	}
 
-	mi, err := ms.handle.Request(serverId, msgR, milliSecs)
-	if err != nil {
-		return nil, err
-	}
-	var ri *Reply
-	err = json.Unmarshal(mi.Body, ri)
-	if err != nil {
-		ri = &Reply{
-			Success: false,
-			Msg: "鏈嶅姟璇锋眰澶辫触",
-			Data: "鏈嶅姟璇锋眰澶辫触",
-		}
-	}
-	return ri, nil
+	return ms.handle.Request(serverId, msgR, milliSecs)
 }
 
 //鑾峰彇鏈満涓煇涓�涓富棰樼殑 key  锛堢粨鏋滃彧鏈変竴涓厓绱狅級
@@ -195,16 +164,21 @@
 		ms.printLog("requestCenter reply:", cr, "err:", err)
 		return nil, err
 	}
-	if cr.Status == REPLY_SUCCESS && cr.Body != nil {
-		var list []RegisteredClient
-		err = json.Unmarshal(cr.Body, &list)
+	if cr.Success {
+		rd,err := json.Marshal(cr.Data)
 		if err == nil {
-			return list, nil
+			var list []RegisteredClient
+			err = json.Unmarshal(rd, &list)
+			if err == nil {
+				return list, nil
+			} else {
+				ms.printLog("unmarshal to RegisteredClient list err:", err)
+			}
 		} else {
-			ms.printLog("unmarshal to RegisteredClient list err:", err)
+			return nil, fmt.Errorf("marshal reply.Data err:%s", err.Error())
 		}
 	} else {
-		ms.printLog("request center failed,status:", cr.Status, "desc:", cr.Desc)
+		ms.printLog("request center failed,status:", cr.Success, "msg:", cr.Msg, " data:", cr.Data)
 	}
 	return nil, fmt.Errorf("GetRegisteredClient list failed")
 }
@@ -234,14 +208,7 @@
 			Data: "璇锋眰鐨勬帴鍙d笉瀛樺湪锛岃妫�鏌rl",
 		}
 	}
-	rd,err := json.Marshal(*ri)
-	if err != nil {
-		ms.printLog("marshal *ri err:", err)
-	}
-	rMsg := MsgInfo{
-		Body: rd,
-	}
-	retErr := ms.handle.Reply(p, rMsg)
+	retErr := ms.handle.Reply(p, ri)
 	if retErr != nil {
 		ms.printLog("retErr:", retErr)
 	}

--
Gitblit v1.8.0