From 95a390eeb4876315acb41fa0009c65d8c4c9699d Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期三, 06 一月 2021 18:41:28 +0800
Subject: [PATCH] 修改GetNetNodeByTopic从bhomecenter中实时获取主题对应的NetNode列表

---
 hbusc.go |   60 +++++++++++++++++++++++++++++++++---------------------------
 1 files changed, 33 insertions(+), 27 deletions(-)

diff --git a/hbusc.go b/hbusc.go
index 8581eb7..f558b23 100644
--- a/hbusc.go
+++ b/hbusc.go
@@ -360,42 +360,48 @@
 //鑾峰彇topic瀵瑰簲鐨刱ey
 //濡傛灉浼犱簡serverId涓嶄负绌猴紝鍒欒幏鍙栨寚瀹氭満鍣ㄤ笂鐨則opic-key
 //濡傛灉server涓虹┖锛屽垯鑾峰彇鎵�鏈夎妭鐐逛笂topic-key
-func (h *BHBus) GetNetNodeByTopic(serverId string, topic string) ([]bhomebus.NetNode,error) {
+func (h *BHBus) GetNetNodeByTopic(serverId string,srcProc *ProcInfo, topic string) ([]bhomebus.NetNode,error) {
 	h.mtxNode.Lock()
 	defer h.mtxNode.Unlock()
 	var nodes []bhomebus.NetNode
-	if h.nodes != nil {
-		for _,n := range h.nodes {
-			if serverId != "" { //鑾峰彇鎸囧畾鑺傜偣鐨�
-				if n.SvrInfo.ID == serverId {
-					if k,ok := n.Topic2Key[topic];ok {
-						nodes = append(nodes, bhomebus.NetNode{
-							IPHost:n.SvrInfo.IP,
-							Port:n.SvrInfo.Port,
-							Key:k,
-						})
-					}
-				}
-			} else { //鑾峰彇鎵�鏈夎妭鐐圭殑
-				if k,ok := n.Topic2Key[topic];ok {
-					nodes = append(nodes, bhomebus.NetNode{
-						IPHost:n.SvrInfo.IP,
-						Port:n.SvrInfo.Port,
-						Key:k,
-					})
-				}
-			}
+	reqNetNode := append([]bhomebus.NetNode{}, bhomebus.NetNode{
+		Key: h.sockWorker.peer,
+	})
+	reqD,err := json.Marshal(MsgInfo{
+		SrcProc: *srcProc,
+		MsgType: MesgType_ReqRep,
+		Topic:   TOPIC_QUERYTOPIC,
+		Body:    []byte(topic),
+	})
+	if err != nil {
+		return nil, fmt.Errorf("marshal req err:%s", err.Error())
+	}
+	var ret []bhomebus.Mesg
+	n := h.sockWorker.sock.SendandrecvTimeout(reqNetNode, reqD, &ret, h.conf.sendTimeOut)
+	if n > 0 {
+		var reply CommonReply
+		err = json.Unmarshal(ret[0].Data, &reply)
+		if err != nil {
+			return nil, err
 		}
+		if reply.Status == REPLY_SUCCESS {
+			err = json.Unmarshal(reply.Body, &nodes)
+			if err == nil {
+				return nodes, nil
+			} else {
+				return nil, fmt.Errorf("unmarshal reply.Body err:%s", err.Error())
+			}
+		} else {
+			return nil, fmt.Errorf("REPLY STATUS:%d", reply.Status)
+		}
+	} else {
+		return nil,	fmt.Errorf("GetNetNodeByTopic n:%d", n)
 	}
-	if len(nodes) == 0 {
-		return nil,fmt.Errorf("topic not found in nodes")
-	}
-	return nodes, nil
 }
 
 func (h *BHBus) Request(serverId string, req *MsgInfo, milliSecs int) (resp *MsgInfo, err error) {
 	//1.棣栧厛闇�瑕侀�氳繃topic鎷垮埌鏈満瀵瑰簲鐨凬etNode
-	rNodes, err := h.GetNetNodeByTopic(serverId, req.Topic)
+	rNodes, err := h.GetNetNodeByTopic(serverId, &req.SrcProc, req.Topic)
 	if err != nil {
 		return nil, err
 	}

--
Gitblit v1.8.0