Create DomainParticipant, Topic, and Type ========================================= .. highlight:: c A DomainParticipantFactory_ creates *DomainParticipants*, and a *DomainParticipant* itself is the factory for creating *Publishers*, *Subscribers*, and *Topics*. When creating a *DomainParticipant*, you may need to customize DomainParticipantQos_, notably for: - **Resource limits**. Default resource limits are set at minimum values. - **Initial peers**. - **Discovery**. The name of the registered discovery component ("dpde" or "dpse") must be assigned to DiscoveryQosPolicy_'s name. - **Participant Name**. Every *DomainParticipant* is given the same default name. Must be unique when using DPSE discovery. Example code: - Create a *DomainParticipant* with configured DomainParticipantQos_: :: DDS_DomainParticipant *participant = NULL; struct DDS_DomainParticipantQos dp_qos = DDS_DomainParticipantQos_INITIALIZER; /* DDS domain of DomainParticipant */ DDS_Long domain_id = 0; /* Name of your registered Discovery component */ if (!RT_ComponentFactoryId_set_name(&dp_qos.discovery.discovery.name, "dpde")) { /* failure */ } /* Initial peers: use only default multicast peer */ DDS_StringSeq_set_maximum(&dp_qos.discovery.initial_peers,1); DDS_StringSeq_set_length(&dp_qos.discovery.initial_peers,1); *DDS_StringSeq_get_reference(&dp_qos.discovery.initial_peers,0) = DDS_String_dup("239.255.0.1"); /* Resource limits */ dp_qos.resource_limits.max_destination_ports = 32; dp_qos.resource_limits.max_receive_ports = 32; dp_qos.resource_limits.local_topic_allocation = 1; dp_qos.resource_limits.local_type_allocation = 1; dp_qos.resource_limits.local_reader_allocation = 1; dp_qos.resource_limits.local_writer_allocation = 1; dp_qos.resource_limits.remote_participant_allocation = 8; dp_qos.resource_limits.remote_reader_allocation = 8; dp_qos.resource_limits.remote_writer_allocation = 8; /* Participant name */ strcpy(dp_qos.participant_name.name, "Participant_1"); participant = DDS_DomainParticipantFactory_create_participant(factory, domain_id, &dp_qos, NULL, DDS_STATUS_MASK_NONE); if (participant == NULL) { /* failure */ } Register Type ------------- Your data types that have been generated from IDL need to be registered with the *DomainParticipants* that will be using them. Each registered type must have a unique name, preferably the same as its IDL defined name. :: DDS_ReturnCode_t retcode; retcode = DDS_DomainParticipant_register_type(participant, "HelloWorld", HelloWorldTypePlugin_get()); if (retcode != DDS_RETCODE_OK) { /* failure */ } Create Topic of Registered Type ------------------------------- DDS *Topics* encapsulate the types being communicated, and you can create *Topics* for your type once your type is registered. A topic is given a name at creation (e.g. "Example HelloWorld"). The type associated with the *Topic* is specified with its registered name. :: DDS_Topic *topic = NULL; topic = DDS_DomainParticipant_create_topic(participant, "Example HelloWorld", "HelloWorld", &DDS_TOPIC_QOS_DEFAULT, NULL, DDS_STATUS_MASK_NONE); if (topic == NULL) { /* failure */ } DPSE Discovery: Assert Remote Participant ----------------------------------------- DPSE Discovery relies on the application to specify the other, or remote, *DomainParticipants* that its local *DomainParticipants* are allowed to discover. Your application must call a DPSE_ API for each remote participant to discover. The API takes as input the name of the remote participant. :: /* Enable discovery of remote participant with name Participant_2 */ retcode = DPSE_RemoteParticipant_assert(participant, "Participant_2"); if (retcode != DDS_RETCODE_OK) { /* failure */ } For more information, see the :doc:`../usersmanual/domains` section in the User's Manual.