From 0221151323846d159fbe9f9a9a6986768c1ce4c7 Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期三, 30 六月 2021 13:10:16 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/valib/bhshmq

---
 box/node_center.h |   33 ++++++++++++++++++++++++++++++++-
 1 files changed, 32 insertions(+), 1 deletions(-)

diff --git a/box/node_center.h b/box/node_center.h
index 54f84c0..b6ceab5 100644
--- a/box/node_center.h
+++ b/box/node_center.h
@@ -18,6 +18,7 @@
 #ifndef NODE_CENTER_KY67RJ1Q
 #define NODE_CENTER_KY67RJ1Q
 
+#include "json.h"
 #include "shm_socket.h"
 #include <unordered_map>
 
@@ -188,12 +189,15 @@
 	void OnTimer();
 
 	// remote hosts records
-	std::vector<std::string> FindRemoteSubClients(const Topic &topic);
+	std::set<std::string> FindRemoteSubClients(const Topic &topic) { return net_records_.FindSubHosts(topic); }
+	std::set<std::string> FindRemoteRPCServers(const Topic &topic) { return net_records_.FindRPCHosts(topic); }
+	void ParseNetInfo(ssjson::Json &info) { net_records_.ParseData(info); }
 
 private:
 	void CheckNodes();
 	bool CanHeartbeat(const NodeInfo &node) { return Valid(node) || node.state_.flag_ == kStateOffline; }
 	void Publish(SharedMemory &shm, const Topic &topic, const std::string &content);
+	void Notify(const Topic &topic, NodeInfo &node);
 	void DoPublish(ShmSocket &sock, const Topic &topic, MsgI &msg);
 	Clients DoFindClients(const std::string &topic, bool from_remote);
 	bool Valid(const NodeInfo &node) { return node.state_.flag_ == kStateNormal; }
@@ -218,6 +222,33 @@
 	int64_t offline_time_;
 	int64_t kill_time_;
 	int64_t last_check_time_;
+
+	// net hosts info
+	class NetRecords
+	{
+	public:
+		typedef std::set<std::string> Hosts;
+		void ParseData(const ssjson::Json &input);
+		Hosts FindRPCHosts(const Topic &topic) { return FindHosts(topic, rpc_hosts_); }
+		Hosts FindSubHosts(const Topic &topic) { return FindHosts(topic, sub_hosts_); }
+
+	private:
+		typedef std::unordered_map<Topic, Hosts> TopicMap;
+		TopicMap sub_hosts_;
+		TopicMap rpc_hosts_;
+		Hosts FindHosts(const Topic &topic, const TopicMap &tmap)
+		{
+			auto pos = tmap.find(topic);
+			if (pos != tmap.end()) {
+				return pos->second;
+			} else {
+				return Hosts();
+			}
+		}
+		std::string host_id_;
+		std::string ip_;
+	};
+	NetRecords net_records_;
 };
 
 #endif // end of include guard: NODE_CENTER_KY67RJ1Q

--
Gitblit v1.8.0