A discovery class that implements a distributed topic discovery protocol. More...
#include <ignition/transport/Discovery.hh>
Public Member Functions | |
Discovery (const std::string &_pUuid, const int _port, const bool _verbose=false) | |
Constructor. More... | |
virtual | ~Discovery () |
Destructor. More... | |
unsigned int | ActivityInterval () const |
The discovery checks the validity of the topic information every 'activity interval' milliseconds. More... | |
bool | Advertise (const Pub &_publisher) |
Advertise a new message. More... | |
void | ConnectionsCb (const DiscoveryCallback< Pub > &_cb) |
Register a callback to receive discovery connection events. More... | |
void | DisconnectionsCb (const DiscoveryCallback< Pub > &_cb) |
Register a callback to receive discovery disconnection events. More... | |
bool | Discover (const std::string &_topic) const |
Request discovery information about a topic. More... | |
unsigned int | HeartbeatInterval () const |
Each node broadcasts periodic heartbeats to keep its topic information alive in other nodes. More... | |
std::string | HostAddr () const |
Get the IP address of this host. More... | |
const TopicStorage< Pub > & | Info () const |
Get the discovery information. More... | |
void | PrintCurrentState () const |
Print the current discovery state. More... | |
bool | Publishers (const std::string &_topic, Addresses_M< Pub > &_publishers) const |
Get all the publishers' information known for a given topic. More... | |
void | SetActivityInterval (const unsigned int _ms) |
Set the activity interval. More... | |
void | SetHeartbeatInterval (const unsigned int _ms) |
Set the heartbeat interval. More... | |
void | SetSilenceInterval (const unsigned int _ms) |
Set the maximum silence interval. More... | |
unsigned int | SilenceInterval () const |
Get the maximum time allowed without receiving any discovery information from a node before canceling its entries. More... | |
void | Start () |
Start the discovery service. More... | |
void | TopicList (std::vector< std::string > &_topics) const |
Get the list of topics currently advertised in the network. More... | |
bool | Unadvertise (const std::string &_topic, const std::string &_nUuid) |
Unadvertise a new message. More... | |
void | WaitForInit () const |
Check if ready/initialized. More... | |
Protected Attributes | |
std::map< std::string, Timestamp > | activity |
Activity information. More... | |
A discovery class that implements a distributed topic discovery protocol.
It uses UDP broadcast for sending/receiving messages and stores updated topic information. The discovery clients can request the discovery of a topic or the advertisement of a local topic. The discovery uses heartbeats to track the state of other peers in the network. The discovery clients can register callbacks to detect when new topics are discovered or topics are no longer available.
|
inline |
Constructor.
[in] | _pUuid | This discovery instance will run inside a transport process. This parameter is the transport process' UUID. |
[in] | _port | UDP port used for discovery traffic. |
[in] | _verbose | true for enabling verbose mode. |
References ignition::transport::determineInterfaces(), and ignition::transport::env().
|
inlinevirtual |
Destructor.
References ignition::transport::ByeType.
|
inline |
The discovery checks the validity of the topic information every 'activity interval' milliseconds.
|
inline |
Advertise a new message.
[in] | _publisher | Publisher's information to advertise. |
References ignition::transport::AdvType, and ignition::transport::PROCESS.
|
inline |
Register a callback to receive discovery connection events.
Each time a new topic is connected, the callback will be executed. This version uses a free function as callback.
[in] | _cb | Function callback. |
|
inline |
Register a callback to receive discovery disconnection events.
Each time a topic is no longer active, the callback will be executed. This version uses a free function as callback.
[in] | _cb | Function callback. |
|
inline |
Request discovery information about a topic.
When using this method, the user might want to use SetConnectionsCb() and SetDisconnectionCb(), that registers callbacks that will be executed when the topic address is discovered or when the node providing the topic is disconnected.
[in] | _topic | Topic name requested. |
References ignition::transport::SubType.
|
inline |
Each node broadcasts periodic heartbeats to keep its topic information alive in other nodes.
A heartbeat message is sent after 'heartbeat interval' milliseconds.
|
inline |
Get the IP address of this host.
|
inline |
Get the discovery information.
|
inline |
Print the current discovery state.
|
inline |
Get all the publishers' information known for a given topic.
[in] | _topic | Topic name. |
[out] | _publishers | Publishers requested. |
|
inline |
|
inline |
|
inline |
Set the maximum silence interval.
[in] | _ms | New value in milliseconds. |
|
inline |
Get the maximum time allowed without receiving any discovery information from a node before canceling its entries.
|
inline |
Start the discovery service.
You probably want to register the callbacks for receiving discovery notifications before starting the service.
|
inline |
Get the list of topics currently advertised in the network.
[out] | _topics | List of advertised topics. |
|
inline |
Unadvertise a new message.
Broadcast a discovery message that will cancel all the discovery information for the topic advertised by a specific node.
[in] | _topic | Topic name to be unadvertised. |
[in] | _nUuid | Node UUID. |
References ignition::transport::PROCESS, and ignition::transport::UnadvType.
|
inline |
Check if ready/initialized.
If not, then wait on the initializedCv condition variable.
|
protected |
Activity information.
Every time there is a message from a remote node, its activity information is updated. If we do not hear from a node in a while, its entries in 'info' will be invalided. The key is the process uuid.