3.3.1. Publisher
The Publisher acts on behalf of one or several DataWriter objects that belong to it. It serves as a container that allows grouping different DataWriter objects under a common configuration given by the PublisherQos of the Publisher.
DataWriter objects that belong to the same Publisher do not have any other relation among each other beyond the PublisherQos of the Publisher and act independently otherwise. Specifically, a Publisher can host DataWriter objects for different Topics and data types.
3.3.1.1. PublisherQos
PublisherQos
controls the behavior of the Publisher
.
Internally it contains the following QosPolicy
objects:
QosPolicy class |
Accessor/Mutator |
Mutable |
---|---|---|
Yes |
||
Yes |
||
Yes |
||
Yes |
Refer to the detailed description of each QosPolicy
class for more information about their usage and
default values.
The QoS value of a previously created Publisher can be modified using the
Publisher::set_qos()
member function.
// 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
Publisher* publisher =
participant->create_publisher(PUBLISHER_QOS_DEFAULT);
if (nullptr == publisher)
{
// Error
return;
}
// Get the current QoS or create a new one from scratch
PublisherQos qos = publisher->get_qos();
// Modify QoS attributes
// (...)
// Assign the new Qos to the object
publisher->set_qos(qos);
3.3.1.1.1. Default PublisherQos
The default PublisherQos refers to the value returned by the
get_default_publisher_qos()
member function on the DomainParticipant instance.
The special value PUBLISHER_QOS_DEFAULT
can be used as QoS argument on
create_publisher()
or Publisher::set_qos()
member functions to indicate that the current
default PublisherQos should be used.
When the system starts, the default PublisherQos is equivalent to the default constructed
value PublisherQos()
.
The default PublisherQos can be modified at any time using the
set_default_publisher_qos()
member function on the DomainParticipant instance.
Modifying the default PublisherQos will not affect already existing
Publisher instances.
// Create a DomainParticipant in the desired domain
DomainParticipant* participant =
DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT);
if (nullptr == participant)
{
// Error
return;
}
// Get the current QoS or create a new one from scratch
PublisherQos qos_type1 = participant->get_default_publisher_qos();
// Modify QoS attributes
// (...)
// Set as the new default PublisherQos
if (participant->set_default_publisher_qos(qos_type1) != RETCODE_OK)
{
// Error
return;
}
// Create a Publisher with the new default PublisherQos.
Publisher* publisher_with_qos_type1 =
participant->create_publisher(PUBLISHER_QOS_DEFAULT);
if (nullptr == publisher_with_qos_type1)
{
// Error
return;
}
// Get the current QoS or create a new one from scratch
PublisherQos qos_type2;
// Modify QoS attributes
// (...)
// Set as the new default PublisherQos
if (participant->set_default_publisher_qos(qos_type2) != RETCODE_OK)
{
// Error
return;
}
// Create a Publisher with the new default PublisherQos.
Publisher* publisher_with_qos_type2 =
participant->create_publisher(PUBLISHER_QOS_DEFAULT);
if (nullptr == publisher_with_qos_type2)
{
// Error
return;
}
// Resetting the default PublisherQos to the original default constructed values
if (participant->set_default_publisher_qos(PUBLISHER_QOS_DEFAULT)
!= RETCODE_OK)
{
// Error
return;
}
// The previous instruction is equivalent to the following
if (participant->set_default_publisher_qos(PublisherQos())
!= RETCODE_OK)
{
// Error
return;
}
set_default_publisher_qos()
member function also accepts the special value
PUBLISHER_QOS_DEFAULT
as input argument.
This will reset the current default PublisherQos to default constructed
value PublisherQos()
.
// 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 custom PublisherQos
PublisherQos custom_qos;
// Modify QoS attributes
// (...)
// Create a publisher with a custom PublisherQos
Publisher* publisher = participant->create_publisher(custom_qos);
if (nullptr == publisher)
{
// Error
return;
}
// Set the QoS on the publisher to the default
if (publisher->set_qos(PUBLISHER_QOS_DEFAULT) != RETCODE_OK)
{
// Error
return;
}
// The previous instruction is equivalent to the following:
if (publisher->set_qos(participant->get_default_publisher_qos())
!= RETCODE_OK)
{
// Error
return;
}
Note
The value PUBLISHER_QOS_DEFAULT
has different meaning depending on where it is used:
On
create_publisher()
andPublisher::set_qos()
it refers to the default PublisherQos. as returned byget_default_publisher_qos()
.On
set_default_publisher_qos()
it refers to the default constructedPublisherQos()
.