3.3.3. Creating a Publisher
A Publisher always belongs to a DomainParticipant.
Creation of a Publisher is done with the create_publisher()
member function on the
DomainParticipant instance, that acts as a factory for the Publisher.
Mandatory arguments are:
The PublisherQos describing the behavior of the Publisher. If the provided value is
PUBLISHER_QOS_DEFAULT
, the value of the Default PublisherQos is used.
Optional arguments are:
A Listener derived from PublisherListener, implementing the callbacks that will be triggered in response to events and state changes on the Publisher. By default empty callbacks are used.
A
StatusMask
that activates or deactivates triggering of individual callbacks on the PublisherListener. By default all events are enabled.
create_publisher()
will return a null pointer if there was an error during the operation, e.g.
if the provided QoS is not compatible or is not supported.
It is advisable to check that the returned value is a valid pointer.
// Create a DomainParticipant in the desired domain
DomainParticipant* participant =
DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT);
if (nullptr == participant)
{
// Error
return;
}
// Create a Publisher with default PublisherQos and no Listener
// The value PUBLISHER_QOS_DEFAULT is used to denote the default QoS.
Publisher* publisher_with_default_qos =
participant->create_publisher(PUBLISHER_QOS_DEFAULT);
if (nullptr == publisher_with_default_qos)
{
// Error
return;
}
// A custom PublisherQos can be provided to the creation method
PublisherQos custom_qos;
// Modify QoS attributes
// (...)
Publisher* publisher_with_custom_qos =
participant->create_publisher(custom_qos);
if (nullptr == publisher_with_custom_qos)
{
// Error
return;
}
// Create a Publisher with default QoS and a custom Listener.
// CustomPublisherListener inherits from PublisherListener.
// The value PUBLISHER_QOS_DEFAULT is used to denote the default QoS.
CustomPublisherListener custom_listener;
Publisher* publisher_with_default_qos_and_custom_listener =
participant->create_publisher(PUBLISHER_QOS_DEFAULT, &custom_listener);
if (nullptr == publisher_with_default_qos_and_custom_listener)
{
// Error
return;
}
3.3.3.1. Profile based creation of a Publisher
Instead of using a PublisherQos, the name of a profile
can be used to create a Publisher with the create_publisher_with_profile()
member function on the DomainParticipant instance.
Mandatory arguments are:
A string with the name that identifies the Publisher.
Optional arguments are:
A Listener derived from PublisherListener, implementing the callbacks that will be triggered in response to events and state changes on the Publisher. By default empty callbacks are used.
A
StatusMask
that activates or deactivates triggering of individual callbacks on the PublisherListener. By default all events are enabled.
create_publisher_with_profile()
will return a null pointer if there was an error during the
operation, e.g. if the provided QoS is not compatible or is not supported.
It is advisable to check that the returned value is a valid pointer.
Note
XML profiles must have been loaded previously. See Loading profiles from an XML file.
// First load the XML with the profiles
DomainParticipantFactory::get_instance()->load_XML_profiles_file("profiles.xml");
// Create a DomainParticipant in the desired domain
DomainParticipant* participant =
DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT);
if (nullptr == participant)
{
// Error
return;
}
// Create a Publisher using a profile and no Listener
Publisher* publisher_with_profile =
participant->create_publisher_with_profile("publisher_profile");
if (nullptr == publisher_with_profile)
{
// Error
return;
}
// Create a Publisher using a profile and a custom Listener.
// CustomPublisherListener inherits from PublisherListener.
CustomPublisherListener custom_listener;
Publisher* publisher_with_profile_and_custom_listener =
participant->create_publisher_with_profile("publisher_profile", &custom_listener);
if (nullptr == publisher_with_profile_and_custom_listener)
{
// Error
return;
}
3.3.3.2. Deleting a Publisher
A Publisher can be deleted with the delete_publisher()
member function on the
DomainParticipant instance where the Publisher was created.
Note
A Publisher can only be deleted if all Entities belonging to the Publisher
(DataWriters) have already been deleted.
Otherwise, the function will issue an error and the Publisher will not be deleted.
This can be performed by using the delete_contained_entities()
member function of the
Publisher.
// Create a DomainParticipant in the desired domain
DomainParticipant* participant =
DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT);
if (nullptr == participant)
{
// Error
return;
}
// Create a Publisher
Publisher* publisher =
participant->create_publisher(PUBLISHER_QOS_DEFAULT);
if (nullptr == publisher)
{
// Error
return;
}
// Use the Publisher to communicate
// (...)
// Delete the entities the Publisher created.
if (publisher->delete_contained_entities() != RETCODE_OK)
{
// Publisher failed to delete the entities it created.
return;
}
// Delete the Publisher
if (participant->delete_publisher(publisher) != RETCODE_OK)
{
// Error
return;
}