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