lichao
2021-05-10 77a6c3512a44dfe6540dde71946e6484fe4f173f
src/topic_node.h
@@ -22,6 +22,7 @@
#include "socket.h"
#include <atomic>
#include <memory>
#include <mutex>
#include <vector>
using namespace bhome_shm;
@@ -41,8 +42,10 @@
   // topic node
   bool Register(ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms);
   bool Unregister(ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms);
   bool Heartbeat(ProcInfo &proc, MsgCommonReply &reply_body, const int timeout_ms);
   bool Heartbeat(const int timeout_ms);
   bool QueryTopicAddress(BHAddress &dest, MsgQueryTopic &query, MsgQueryTopicReply &reply_body, const int timeout_ms);
   // topic rpc server
   typedef std::function<bool(const std::string &client_proc_id, const MsgRequestTopic &request, MsgRequestTopicReply &reply)> ServerSyncCB;
@@ -56,8 +59,8 @@
   // topic client
   typedef std::function<void(const BHMsgHead &head, const MsgRequestTopicReply &reply)> RequestResultCB;
   bool ClientStartWorker(RequestResultCB const &cb, const int nworker = 2);
   bool ClientAsyncRequest(const MsgRequestTopic &request, std::string &msg_id, const RequestResultCB &rrcb = RequestResultCB());
   bool ClientSyncRequest(const MsgRequestTopic &request, std::string &proc_id, MsgRequestTopicReply &reply, const int timeout_ms);
   bool ClientAsyncRequest(const BHAddress &remote_addr, const MsgRequestTopic &request, std::string &msg_id, const RequestResultCB &rrcb = RequestResultCB());
   bool ClientSyncRequest(const BHAddress &remote_addr, const MsgRequestTopic &request, std::string &proc_id, MsgRequestTopicReply &reply, const int timeout_ms);
   // publish
   bool Publish(const MsgPublish &pub, const int timeout_ms);
@@ -72,7 +75,10 @@
   void Stop();
private:
   MQId ssn() { return SockNode().id(); }
   bool ClientQueryRPCTopic(const Topic &topic, BHAddress &addr, const int timeout_ms);
   typedef MsgQueryTopicReply::BHNodeAddress NodeAddress;
   int QueryRPCTopics(const Topic &topic, std::vector<NodeAddress> &addr, const int timeout_ms);
   const std::string &proc_id() { return info_.proc_id(); }
   typedef BHAddress Address;
@@ -116,7 +122,7 @@
         eSockSub,
         eSockEnd,
   };
   std::vector<std::unique_ptr<ShmSocket>> sockets_;
   std::vector<std::shared_ptr<ShmSocket>> sockets_;
   ShmSocket &SockNode() { return *sockets_[eSockNode]; }
   ShmSocket &SockPub() { return *sockets_[eSockPub]; }
@@ -132,7 +138,11 @@
   void state(const State st) { state_.store(st); }
   void state_cas(State expected, const State val) { state_.compare_exchange_strong(expected, val); }
   State state() const { return state_.load(); }
   bool IsOnline() const { return state() == eStateOnline; }
   bool IsOnline() { return Init() && state() == eStateOnline; }
   bool Init();
   bool Valid() const { return !sockets_.empty(); }
   std::mutex mutex_;
   MQId ssn_id_ = 0;
   std::atomic<State> state_;
   TopicQueryCache topic_query_cache_;