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