12 #include <mrpt/core/Clock.h> 13 #include <mrpt/system/COutputLogger.h> 19 #include <shared_mutex> 22 #if defined(MVSIM_HAS_ZMQ) && defined(MVSIM_HAS_PROTOBUF) 24 #include <mvsim/mvsim-msgs/AdvertiseServiceRequest.pb.h> 25 #include <mvsim/mvsim-msgs/AdvertiseTopicRequest.pb.h> 26 #include <mvsim/mvsim-msgs/GetServiceInfoRequest.pb.h> 27 #include <mvsim/mvsim-msgs/ListNodesRequest.pb.h> 28 #include <mvsim/mvsim-msgs/ListTopicsRequest.pb.h> 29 #include <mvsim/mvsim-msgs/RegisterNodeRequest.pb.h> 30 #include <mvsim/mvsim-msgs/SubscribeRequest.pb.h> 31 #include <mvsim/mvsim-msgs/UnregisterNodeRequest.pb.h> 60 class Server :
public mrpt::system::COutputLogger
87 #if defined(MVSIM_HAS_ZMQ) && defined(MVSIM_HAS_PROTOBUF) 88 void handle(
const mvsim_msgs::RegisterNodeRequest& m, zmq::socket_t& s);
89 void handle(
const mvsim_msgs::UnregisterNodeRequest& m, zmq::socket_t& s);
90 void handle(
const mvsim_msgs::SubscribeRequest& m, zmq::socket_t& s);
91 void handle(
const mvsim_msgs::ListTopicsRequest& m, zmq::socket_t& s);
92 void handle(
const mvsim_msgs::ListNodesRequest& m, zmq::socket_t& s);
93 void handle(
const mvsim_msgs::AdvertiseTopicRequest& m, zmq::socket_t& s);
94 void handle(
const mvsim_msgs::AdvertiseServiceRequest& m, zmq::socket_t& s);
95 void handle(
const mvsim_msgs::GetServiceInfoRequest& m, zmq::socket_t& s);
113 const std::string& topicName,
const std::string& topicTypeName,
114 const std::string& publisherEndpoint,
const std::string& nodeName);
118 const std::string& serviceName,
const std::string& inputTypeName,
119 const std::string& outputTypeName,
const std::string& publisherEndpoint,
120 const std::string& nodeName);
124 const std::string& serviceName, std::string& publisherEndpoint,
125 std::string& nodeName)
const;
128 const std::string& topicName,
const std::string& updatesEndPoint);
133 const std::string& topicName,
134 const std::optional<std::string>& updatesEndPoint = std::nullopt);
156 const std::string& topic_name,
157 const std::string& publisher_node_name,
158 const std::string& publisher_endpoint)
159 : topicName(topic_name),
160 publisherNodeName(publisher_node_name),
161 publisherEndpoint(publisher_endpoint)
172 const std::string& topic_name,
173 const std::string& sub_updates_endpoint)
174 : topicName(topic_name),
175 subscriberUpdatesEndpoint(sub_updates_endpoint)
186 const std::string& name,
const std::string& topic_type_name)
187 : topicName(name), topicTypeName(topic_type_name)
202 const std::string& name,
const std::string& in_type_name,
203 const std::string& out_type_name,
const std::string& end_point,
204 const std::string& node_name)
206 inputTypeName(in_type_name),
207 outputTypeName(out_type_name),
const std::string nodeName
void db_advertise_topic(const std::string &topicName, const std::string &topicTypeName, const std::string &publisherEndpoint, const std::string &nodeName)
std::set< std::string > subscribedTopics
const std::string topicName
std::map< node_name_t, InfoPerNode > connectedNodes_
InfoPerNode(const std::string &name)
InfoPerService(const std::string &name, const std::string &in_type_name, const std::string &out_type_name, const std::string &end_point, const std::string &node_name)
void db_advertise_service(const std::string &serviceName, const std::string &inputTypeName, const std::string &outputTypeName, const std::string &publisherEndpoint, const std::string &nodeName)
const endpoint_t subscriberUpdatesEndpoint
const mrpt::Clock::time_point timeConnected
std::string service_name_t
std::map< service_name_t, InfoPerService > knownServices_
bool db_get_service_info(const std::string &serviceName, std::string &publisherEndpoint, std::string &nodeName) const
void internalServerThread()
void db_remove_node(const std::string &nodeName)
std::shared_mutex dbMutex
unsigned int listenningPort() const
InfoPerTopic(const std::string &name, const std::string &topic_type_name)
void listenningPort(unsigned int port)
InfoPerSubscriber(const std::string &topic_name, const std::string &sub_updates_endpoint)
std::map< node_name_t, InfoPerPublisher > publishers
const std::string publisherNodeName
std::atomic< zmq::context_t * > mainThreadZMQcontext_
std::map< topic_name_t, InfoPerTopic > knownTopics_
void requestMainThreadTermination()
std::set< std::string > advertisedTopics
unsigned int serverPortNo_
void db_add_topic_subscriber(const std::string &topicName, const std::string &updatesEndPoint)
constexpr unsigned int MVSIM_PORTNO_MAIN_REP
const endpoint_t publisherEndpoint
void db_register_node(const std::string &nodeName)
void send_topic_publishers_to_subscribed_clients(const std::string &topicName, const std::optional< std::string > &updatesEndPoint=std::nullopt)
std::string topicTypeName
std::map< endpoint_t, InfoPerSubscriber > subscribers
const std::string topicName
InfoPerPublisher(const std::string &topic_name, const std::string &publisher_node_name, const std::string &publisher_endpoint)