18#ifndef IGN_TRANSPORT_NODESHARED_HH_
19#define IGN_TRANSPORT_NODESHARED_HH_
22#pragma warning(push, 0)
24#include <google/protobuf/message.h>
36#include "ignition/transport/Export.hh"
54 class NodeSharedPrivate;
82 const size_t _dataSize,
240 private:
bool InitializeSockets();
262 private:
const int kMsgDiscPort = 11317;
265 private:
const int kSrvDiscPort = 11318;
360 private:
friend Node;
361 private:
friend NodePrivate;
Node(const NodeOptions &_options=NodeOptions())
Constructor.
Class to store and manage service call handlers.
Definition HandlerStorage.hh:34
This class stores all the information about a message publisher.
Definition Publisher.hh:199
Private data for the Node class. This class should not be directly used. You should use the Node clas...
Definition NodeShared.hh:60
std::string myControlAddress
My pub/sub control address.
Definition NodeShared.hh:346
HandlerWrapper localSubscribers
Definition NodeShared.hh:331
int verbose
Print activity to stdout.
Definition NodeShared.hh:340
void OnNewDisconnection(const MessagePublisher &_pub)
Callback executed when the discovery detects disconnections.
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.
std::string hostAddr
IP address of this host.
Definition NodeShared.hh:355
static NodeShared * Instance()
NodeShared is a singleton. This method gets the NodeShared instance shared between all the nodes.
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 RecvSrvRequest()
Method in charge of receiving the service call requests.
std::string pUuid
Process UUID.
Definition NodeShared.hh:253
std::string myRequesterAddress
My requester service call address.
Definition NodeShared.hh:349
std::string myAddress
My pub/sub address.
Definition NodeShared.hh:343
TopicStorage< MessagePublisher > remoteSubscribers
Remote subscribers.
Definition NodeShared.hh:274
std::recursive_mutex mutex
Mutex to guarantee exclusive access between all threads.
Definition NodeShared.hh:259
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 OnNewSrvConnection(const ServicePublisher &_pub)
Callback executed when the discovery detects a new service call.
virtual ~NodeShared()
Destructor.
HandlerStorage< IRepHandler > repliers
Service call repliers.
Definition NodeShared.hh:334
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 NodeShared.hh:337
std::string myReplierAddress
My replier service call address.
Definition NodeShared.hh:352
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.
void TriggerSubscriberCallbacks(const std::string &_topic, const std::string &_msgData, const std::string &_msgType, const HandlerInfo &_handlerInfo)
Call the SubscriptionHandler callbacks (local and raw) for this NodeShared.
Uuid responseReceiverId
Response receiver socket identity.
Definition NodeShared.hh:247
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 NodeShared.hh:250
std::thread threadReception
thread in charge of receiving and handling incoming messages.
Definition NodeShared.hh:256
A class that allows a client to communicate with other peers. There are two main communication modes:...
Definition Node.hh:65
This class stores all the information about a service publisher.
Definition Publisher.hh:315
Store address information about topics and provide convenient methods for adding new topics,...
Definition TopicStorage.hh:38
A portable class for representing a Universally Unique Identifier.
Definition Uuid.hh:42
void(void *_data, void *_hint) DeallocFunc
Definition TransportTypes.hh:167
Definition AdvertiseOptions.hh:28
HandlerInfo contains information about callback handlers which is useful for local publishers and mes...
Definition NodeShared.hh:94
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 NodeShared.hh:98
bool haveRaw
True iff there are any raw local subscribers.
Definition NodeShared.hh:109
bool haveLocal
True iff there are any standard local subscribers.
Definition NodeShared.hh:106
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 NodeShared.hh:103
This struct wraps up the two different types of subscription handlers: normal (deserialized) and raw ...
Definition NodeShared.hh:281
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 NodeShared.hh:323
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...
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 NodeShared.hh:328
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...
This struct provides information about the Subscribers of a Publisher. It should only be retrieved us...
Definition NodeShared.hh:135
bool haveRemote
True iff this Publisher has any remote subscribers.
Definition NodeShared.hh:137