18 #ifndef GZ_TRANSPORT_NODESHARED_HH_
19 #define GZ_TRANSPORT_NODESHARED_HH_
22 #pragma warning(push, 0)
24 #include <google/protobuf/message.h>
37 #include "gz/transport/config.hh"
38 #include "gz/transport/Export.hh"
52 inline namespace IGNITION_TRANSPORT_VERSION_NAMESPACE {
59 class NodeSharedPrivate;
87 const size_t _dataSize,
295 private:
bool InitializeSockets();
310 #pragma warning(push)
311 #pragma warning(disable: 4251)
326 public:
static const int kDefaultMsgDiscPort = 10317;
329 public:
static const int kDefaultSrvDiscPort = 10318;
332 public:
int msgDiscPort = kDefaultMsgDiscPort;
335 public:
int srvDiscPort = kDefaultSrvDiscPort;
409 #pragma warning(push)
410 #pragma warning(disable: 4251)
441 private:
friend Node;
442 private:
friend NodePrivate;
Class to store and manage service call handlers.
Definition: gz/transport/HandlerStorage.hh:38
A class that provides information about the message received.
Definition: gz/transport/MessageInfo.hh:36
This class stores all the information about a message publisher.
Definition: gz/transport/Publisher.hh:177
Private data for the Node class. This class should not be directly used. You should use the Node clas...
Definition: gz/transport/NodeShared.hh:65
std::string myControlAddress
My pub/sub control address.
Definition: gz/transport/NodeShared.hh:425
HandlerWrapper localSubscribers
Definition: gz/transport/NodeShared.hh:404
int verbose
Print activity to stdout.
Definition: gz/transport/NodeShared.hh:419
void OnNewDisconnection(const MessagePublisher &_pub)
Callback executed when the discovery detects disconnections.
void EnableStats(const std::string &_topic, bool _enable, std::function< void(const TopicStatistics &_stats)> _cb)
Turn topic statistics on or off.
void OnNewSrvDisconnection(const ServicePublisher &_pub)
Callback executed when a service call is no longer available.
void RecvMsgUpdate()
Method in charge of receiving the topic updates.
int SndHwm()
Get the capacity of the buffer (High Water Mark) that stores outgoing Ignition Transport messages....
void TriggerCallbacks(const MessageInfo &_info, const std::string &_msgData, const HandlerInfo &_handlerInfo)
Call the SubscriptionHandler callbacks (local and raw) for this NodeShared.
std::string hostAddr
IP address of this host.
Definition: gz/transport/NodeShared.hh:434
SubscriberInfo CheckSubscriberInfo(const std::string &_topic, const std::string &_msgType) const
Get information about the nodes that are subscribed to the publishers of this NodeShared.
void OnEndRegistration(const MessagePublisher &_pub)
Callback executed when a remote subscriber unregisters.
void RecvSrvRequest()
Method in charge of receiving the service call requests.
std::string pUuid
Process UUID.
Definition: gz/transport/NodeShared.hh:314
std::string myRequesterAddress
My requester service call address.
Definition: gz/transport/NodeShared.hh:428
std::string myAddress
My pub/sub address.
Definition: gz/transport/NodeShared.hh:422
TopicStorage< MessagePublisher > remoteSubscribers
Remote subscribers.
Definition: gz/transport/NodeShared.hh:344
static NodeShared * Instance()
NodeShared is a singleton. This method gets the NodeShared instance shared between all the nodes.
std::recursive_mutex mutex
Mutex to guarantee exclusive access between all threads.
Definition: gz/transport/NodeShared.hh:320
bool TopicPublishers(const std::string &_topic, SrvAddresses_M &_publishers) const
Pass through to bool Publishers(const std::string &_topic, Addresses_M<Pub> &_publishers) const.
bool DiscoverService(const std::string &_topic) const
Pass through to bool Discovery::Discover(const std::string &_topic) const.
void OnNewRegistration(const MessagePublisher &_pub)
Callback executed when a remote subscriber connects.
int RcvHwm()
Get the capacity of the buffer (High Water Mark) that stores incoming Ignition Transport messages....
void OnNewSrvConnection(const ServicePublisher &_pub)
Callback executed when the discovery detects a new service call.
virtual ~NodeShared()
Destructor.
std::optional< TopicStatistics > TopicStats(const std::string &_topic) const
Get the current statistics for a topic. Statistics must have been enabled using the EnableStatistics ...
HandlerStorage< IRepHandler > repliers
Service call repliers.
Definition: gz/transport/NodeShared.hh:413
void SendPendingRemoteReqs(const std::string &_topic, const std::string &_reqType, const std::string &_repType)
Try to send all the requests for a given service call and a pair of request/response types.
bool AdvertisePublisher(const ServicePublisher &_publisher)
Pass through to bool Advertise(const Pub &_publisher)
HandlerStorage< IReqHandler > requests
Pending service call requests.
Definition: gz/transport/NodeShared.hh:416
std::string myReplierAddress
My replier service call address.
Definition: gz/transport/NodeShared.hh:431
bool Publish(const std::string &_topic, char *_data, const size_t _dataSize, DeallocFunc *_ffn, const std::string &_msgType)
Publish data.
HandlerInfo CheckHandlerInfo(const std::string &_topic) const
Get information about the local and raw subscribers that are attached to this NodeShared.
void OnNewConnection(const MessagePublisher &_pub)
Callback executed when the discovery detects new topics.
void RecvSrvResponse()
Method in charge of receiving the service call responses.
Uuid responseReceiverId
Response receiver socket identity.
Definition: gz/transport/NodeShared.hh:302
void RunReceptionTask()
Receive data and control messages.
void RecvControlUpdate()
Method in charge of receiving the control updates (when a new remote subscriber notifies its presence...
Uuid replierId
Replier socket identity.
Definition: gz/transport/NodeShared.hh:305
std::thread threadReception
thread in charge of receiving and handling incoming messages.
Definition: gz/transport/NodeShared.hh:317
A class that allows a client to communicate with other peers. There are two main communication modes:...
Definition: gz/transport/Node.hh:94
This class stores all the information about a service publisher.
Definition: gz/transport/Publisher.hh:292
Encapsulates statistics for a single topic. The set of statistics include:
Definition: gz/transport/TopicStatistics.hh:112
Store address information about topics and provide convenient methods for adding new topics,...
Definition: gz/transport/TopicStorage.hh:40
A portable class for representing a Universally Unique Identifier.
Definition: gz/transport/Uuid.hh:44
Definition: gz/transport/AdvertiseOptions.hh:29
void(void *_data, void *_hint) DeallocFunc
Definition: gz/transport/TransportTypes.hh:169
HandlerInfo contains information about callback handlers which is useful for local publishers and mes...
Definition: gz/transport/NodeShared.hh:99
std::map< std::string, ISubscriptionHandler_M > localHandlers
This is a map of the standard local callback handlers. The key is the topic name, and the value is an...
Definition: gz/transport/NodeShared.hh:103
bool haveRaw
True iff there are any raw local subscribers.
Definition: gz/transport/NodeShared.hh:114
bool haveLocal
True iff there are any standard local subscribers.
Definition: gz/transport/NodeShared.hh:111
std::map< std::string, RawSubscriptionHandler_M > rawHandlers
This is a map of the raw local callback handlers. The key is the topic name, and the value is another...
Definition: gz/transport/NodeShared.hh:108
This struct wraps up the two different types of subscription handlers: normal (deserialized) and raw ...
Definition: gz/transport/NodeShared.hh:354
bool HasSubscriber(const std::string &_fullyQualifiedTopic) const
Returns true if this wrapper contains any subscriber that matches the given fully-qualified topic nam...
HandlerStorage< ISubscriptionHandler > normal
Normal local subscriptions.
Definition: gz/transport/NodeShared.hh:396
bool HasSubscriber(const std::string &_fullyQualifiedTopic, const std::string &_msgType) const
Returns true if this wrapper contains any subscriber that matches the given topic name and message ty...
std::vector< std::string > NodeUuids(const std::string &_fullyQualifiedTopic, const std::string &_msgTypeName) const
Get a set of node UUIDs for subscribers in this wrapper that match the topic and message type criteri...
bool RemoveHandlersForNode(const std::string &_fullyQualifiedTopic, const std::string &_nUuid)
Remove the handlers for the given topic name that belong to a specific node.
HandlerStorage< RawSubscriptionHandler > raw
Raw local subscriptions. Keeping these separate from localSubscriptions allows us to avoid an unneces...
Definition: gz/transport/NodeShared.hh:401
This struct provides information about the Subscribers of a Publisher. It should only be retrieved us...
Definition: gz/transport/NodeShared.hh:140
bool haveRemote
True if this Publisher has any remote subscribers.
Definition: gz/transport/NodeShared.hh:143