| | |
| | | |
| | | #include "msg.h" |
| | | #include "socket.h" |
| | | #include <atomic> |
| | | #include <memory> |
| | | |
| | | using namespace bhome_shm; |
| | |
| | | ShmSocket &SockSub() { return sock_sub_; } |
| | | ShmSocket &SockClient() { return sock_client_; } |
| | | ShmSocket &SockServer() { return sock_server_; } |
| | | bool IsRegistered() const { return registered_.load(); } |
| | | |
| | | ShmSocket sock_node_; |
| | | ShmSocket sock_client_; |
| | | ShmSocket sock_server_; |
| | | ShmSocket sock_sub_; |
| | | std::atomic<bool> registered_; |
| | | std::atomic<bool> registered_ever_; |
| | | enum State { |
| | | eStateUnregistered, |
| | | eStateOnline, |
| | | eStateOffline // heartbeat fail. |
| | | }; |
| | | 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; } |
| | | std::atomic<State> state_; |
| | | |
| | | TopicQueryCache topic_query_cache_; |
| | | }; |