liuxiaolong
2021-07-20 232227035c8d6a31eaaf193863cbadda949c08fd
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