24 #ifndef OMG_DDS_RPC_REQUEST_REPLY_HH 25 #define OMG_DDS_RPC_REQUEST_REPLY_HH 30 #include "vendor_dependent.hh" 31 #include <dds/sample.hh> 50 class RequesterParams;
53 template <
typename TReq,
typename TRep>
56 template <
typename TReq,
typename TRep>
83 template <
class TReq,
class TRep>
108 template <
class TReq,
class TRep>
132 template <
class TRep>
156 template <
class TReq,
class TRep>
197 bool is_null()
const;
201 template <
class Impl>
204 typedef DDS::rpc::rpc_entity_traits::RPCEntity * VendorDependent;
205 VendorDependent impl_;
208 VendorDependent get_impl()
const;
236 void bind(
const std::string & instance_name);
246 bool is_bound()
const;
251 std::string get_bound_instance_name()
const;
257 std::vector<std::string> get_discoverd_service_instances()
const;
262 std::vector<std::string> get_discovered_service_instances()
const;
268 uint32_t get_discovered_service_count()
const;
274 void wait_for_service();
286 void wait_for_service(std::string instanceName);
293 std::string instanceName);
299 void wait_for_services(uint32_t count);
311 void wait_for_services(
const std::vector<std::string> & instanceNames);
318 const std::vector<std::string> & instanceNames);
320 #if defined(CDX_HAS_FUTURE) 321 future<void> wait_for_service_async();
322 future<void> wait_for_service_async(std::string instanceName);
323 future<void> wait_for_services_async(uint32_t count);
324 future<void> wait_for_services_async(
const std::vector<std::string> & instanceNames);
328 virtual void listener_process_reply(
const void * ,
330 virtual void listener_on_reply_available(
ServiceProxy * ) {}
333 typedef DDS::rpc::rpc_entity_traits::Requester * VendorDependent;
361 template <
typename TReq,
typename TRep>
366 typedef TReq RequestType;
367 typedef TRep ReplyType;
368 typedef typename DDS::dds_type_traits<TReq>::DataWriter RequestDataWriter;
369 typedef typename DDS::dds_type_traits<TRep>::DataReader ReplyDataReader;
373 typedef DDS::rpc::rpc_entity_traits::Requester * VendorDependent;
402 #if defined(CDX_HAS_FUTURE) 403 future<DDS::Sample<TRep> > send_request_async(
const TReq &);
406 #ifdef OMG_DDS_RPC_BASIC_PROFILE 411 void send_request(TReq & request);
416 void send_request_oneway(TReq &);
419 #ifdef OMG_DDS_RPC_ENHANCED_PROFILE 420 void send_request(
const TReq & request);
421 void send_request_oneway(
const TReq &);
483 bool wait_for_replies(uint32_t min_count,
501 bool wait_for_replies(uint32_t min_count,
607 bool receive_nondata_samples(
bool enable);
617 RequestDataWriter get_request_datawriter()
const;
622 ReplyDataReader get_reply_datareader()
const;
625 VendorDependent get_impl();
626 virtual void listener_process_reply(
const void * reply,
628 virtual void listener_on_reply_available(
ServiceProxy * sp );
650 virtual void listener_process_request(
const void * ,
652 virtual void listener_on_request_available(
ReplierBase * ) { }
656 friend struct coredx::rpc::ReplierImpl;
674 template <
typename TReq,
typename TRep>
679 typedef TReq RequestType;
680 typedef TRep ReplyType;
681 typedef typename DDS::dds_type_traits<TRep>::DataWriter ReplyDataWriter;
682 typedef typename DDS::dds_type_traits<TReq>::DataReader RequestDataReader;
686 typedef DDS::rpc::rpc_entity_traits::Replier * VendorDependent;
717 #ifdef OMG_DDS_RPC_BASIC_PROFILE 722 void send_reply(TRep & reply,
726 #ifdef OMG_DDS_RPC_ENHANCED_PROFILE 727 void send_reply(
const TRep & reply,
754 LoanedSamplesType receive_requests(uint32_t min_request_count,
755 uint32_t max_request_count,
767 bool wait_for_requests(uint32_t min_count,
789 LoanedSamplesType take_requests(
int max_samples);
810 LoanedSamplesType read_requests(
int max_samples);
822 bool receive_nondata_samples(
bool enable);
827 RequestDataReader get_request_datareader()
const;
832 ReplyDataWriter get_reply_datawriter()
const;
835 VendorDependent get_impl()
const;
837 virtual void listener_process_request(
const void * ,
839 virtual void listener_on_request_available(
ReplierBase * );
886 template <
class TRep>
893 template <
class TReq,
class TRep>
901 RequesterParams & domain_participant(dds_entity_traits::DomainParticipant participant);
913 RequesterParams & subscriber(dds_entity_traits::Subscriber subscriber);
918 RequesterParams & datawriter_qos(dds_entity_traits::DataWriterQos qos);
923 RequesterParams & datareader_qos(dds_entity_traits::DataReaderQos qos);
949 dds_entity_traits::DomainParticipant domain_participant()
const;
954 dds_entity_traits::Publisher publisher()
const;
959 dds_entity_traits::Subscriber subscriber()
const;
964 dds_entity_traits::DataWriterQos datawriter_qos()
const;
969 dds_entity_traits::DataReaderQos datareader_qos()
const;
984 std::string service_name()
const;
989 std::string request_topic_name()
const;
994 std::string reply_topic_name()
const;
998 typedef DDS::rpc::rpc_entity_traits::RequesterParams * VendorDependent;
999 VendorDependent impl_;
1002 VendorDependent get_impl()
const {
return this->impl_; }
1040 template <
class TReq,
class TRep>
1047 template <
class TReq,
class TRep>
1053 ReplierParams & domain_participant(dds_entity_traits::DomainParticipant participant);
1058 ReplierParams & service_name (
const std::string &service_name);
1063 ReplierParams & instance_name (
const std::string &instance_name);
1068 ReplierParams & request_topic_name (
const std::string &req_topic);
1073 ReplierParams & reply_topic_name (
const std::string &rep_topic);
1078 ReplierParams & datawriter_qos(dds_entity_traits::DataWriterQos qos);
1083 ReplierParams & datareader_qos(dds_entity_traits::DataReaderQos qos);
1088 ReplierParams & publisher(dds_entity_traits::Publisher publisher);
1093 ReplierParams & subscriber(dds_entity_traits::Subscriber subscriber);
1098 dds_entity_traits::DomainParticipant domain_participant()
const;
1110 std::string service_name()
const;
1114 std::string instance_name()
const;
1118 std::string request_topic_name()
const;
1122 std::string reply_topic_name()
const;
1126 dds_entity_traits::DataWriterQos datawriter_qos()
const;
1130 dds_entity_traits::DataReaderQos datareader_qos()
const;
1134 dds_entity_traits::Publisher publisher()
const;
1138 dds_entity_traits::Subscriber subscriber()
const;
1142 typedef DDS::rpc::rpc_entity_traits::ReplierParams * VendorDependent;
1143 VendorDependent impl_;
1146 VendorDependent get_impl()
const {
return this->impl_; }
1153 #include "request_reply_tmpl.hh" SimpleReqeusterListener can be installed on a Requester.
Definition: request_reply.hh:133
long ReturnCode_t
Definition: dds.hh:200
SimpleReplierListener can be installed on a Replier.
Definition: request_reply.hh:84
Basis for all rpc related listener classes.
Definition: request_reply.hh:65
A Requester sends requests and receives replies.
Definition: request_reply.hh:54
A replier receives requests and send replies.
Definition: request_reply.hh:57
Holds a collection of sample data and related meta-data.
Definition: sample.hh:65
Holds a reference to sample data intended for transmission.
Definition: sample.hh:64
Sample holds the data and related meta information.
Definition: sample.hh:61
SampleRef holds a reference to data and related meta information.
Definition: sample.hh:62
Provides the DDS infrastructure.
Definition: dds_builtin_basic.hh:28
Holds sample data intended for transmission.
Definition: sample.hh:63
Definition: dds_builtin_basic.hh:239
ServiceProxy.
Definition: request_reply.hh:224
RPCEntity is a base abstract class.
Definition: request_reply.hh:176
Used to pass configuration parameters when constructing a Requester.
Definition: request_reply.hh:862
RequesterListener can be installed on a Requester.
Definition: request_reply.hh:157
Provides a generic basis for all Replier objects.
Definition: request_reply.hh:646
Used to pass configuration parameters when constructing a Replier.
Definition: request_reply.hh:1016
ReplierLister can be installed on a Replier.
Definition: request_reply.hh:109
The Duration_t structure contains data to define a time duration.
Definition: dds_builtin.hh:45