| 
    rmw_fastrtps_shared_cpp
    master
    
   Code shared on static and dynamic type support of rmw_fastrtps_cpp. 
   | 
 
 
 
 
Go to the documentation of this file.
   15 #ifndef RMW_FASTRTPS_SHARED_CPP__CUSTOM_SERVICE_INFO_HPP_ 
   16 #define RMW_FASTRTPS_SHARED_CPP__CUSTOM_SERVICE_INFO_HPP_ 
   19 #include <condition_variable> 
   22 #include <unordered_set> 
   24 #include "fastcdr/FastBuffer.h" 
   26 #include "fastrtps/participant/Participant.h" 
   27 #include "fastrtps/publisher/Publisher.h" 
   28 #include "fastrtps/publisher/PublisherListener.h" 
   29 #include "fastrtps/subscriber/Subscriber.h" 
   30 #include "fastrtps/subscriber/SubscriberListener.h" 
   31 #include "fastrtps/subscriber/SampleInfo.h" 
   69   : info_(info), list_has_data_(false),
 
   70     conditionMutex_(nullptr), conditionVariable_(nullptr)
 
   82     request.
buffer_ = 
new eprosima::fastcdr::FastBuffer();
 
   89       if (eprosima::fastrtps::rtps::ALIVE == request.
sample_info_.sampleKind) {
 
   92         const eprosima::fastrtps::rtps::GUID_t & reader_guid =
 
   93           request.
sample_info_.related_sample_identity.writer_guid();
 
   94         if (reader_guid != eprosima::fastrtps::rtps::GUID_t::unknown() ) {
 
  100         if (conditionMutex_ != 
nullptr) {
 
  102           list.push_back(request);
 
  106           list_has_data_.store(
true);
 
  108           conditionVariable_->notify_one();
 
  110           list.push_back(request);
 
  111           list_has_data_.store(
true);
 
  123     if (conditionMutex_ != 
nullptr) {
 
  126         request = list.front();
 
  128         list_has_data_.store(!list.empty());
 
  132         request = list.front();
 
  134         list_has_data_.store(!list.empty());
 
  145     conditionMutex_ = conditionMutex;
 
  146     conditionVariable_ = conditionVariable;
 
  153     conditionMutex_ = 
nullptr;
 
  154     conditionVariable_ = 
nullptr;
 
  160     return list_has_data_.load();
 
  167   std::atomic_bool list_has_data_;
 
  168   std::mutex * conditionMutex_ RCPPUTILS_TSA_GUARDED_BY(internalMutex_);
 
  177   template<
class Rep, 
class Period>
 
  179     const eprosima::fastrtps::rtps::GUID_t & guid,
 
  184       return subscriptions_.find(guid) != subscriptions_.end();
 
  188     return cv_.
wait_for(lock, rel_time, guid_is_present);
 
  192     eprosima::fastrtps::Publisher * pub,
 
  193     eprosima::fastrtps::rtps::MatchingInfo & matchingInfo)
 
  197     if (eprosima::fastrtps::rtps::MATCHED_MATCHING == matchingInfo.status) {
 
  198       subscriptions_.insert(matchingInfo.remoteEndpointGuid);
 
  199     } 
else if (eprosima::fastrtps::rtps::REMOVED_MATCHING == matchingInfo.status) {
 
  200       subscriptions_.erase(matchingInfo.remoteEndpointGuid);
 
  208   using subscriptions_set_t =
 
  213   subscriptions_set_t subscriptions_ RCPPUTILS_TSA_GUARDED_BY(mutex_);
 
  217 #endif  // RMW_FASTRTPS_SHARED_CPP__CUSTOM_SERVICE_INFO_HPP_ 
  
Definition: custom_service_info.hpp:55
 
const void * impl
Definition: TypeSupport.hpp:38
 
Definition: TypeSupport.hpp:41
 
bool is_cdr_buffer
Definition: TypeSupport.hpp:36
 
const char * typesupport_identifier_
Definition: custom_service_info.hpp:52
 
bool wait_for_subscription(const eprosima::fastrtps::rtps::GUID_t &guid, const std::chrono::duration< Rep, Period > &rel_time)
Definition: custom_service_info.hpp:178
 
CustomServiceRequest()
Definition: custom_service_info.hpp:61
 
#define RCPPUTILS_TSA_REQUIRES(...)
 
eprosima::fastrtps::rtps::SampleIdentity sample_identity_
Definition: custom_service_info.hpp:57
 
void onPublicationMatched(eprosima::fastrtps::Publisher *pub, eprosima::fastrtps::rtps::MatchingInfo &matchingInfo)
Definition: custom_service_info.hpp:191
 
Definition: custom_service_info.hpp:65
 
eprosima::fastrtps::Publisher * response_publisher_
Definition: custom_service_info.hpp:48
 
Definition: guid_utils.hpp:59
 
bool hasData()
Definition: custom_service_info.hpp:158
 
eprosima::fastrtps::SampleInfo_t sample_info_
Definition: custom_service_info.hpp:59
 
ServicePubListener()=default
 
rmw_fastrtps_shared_cpp::TypeSupport * request_type_support_
Definition: custom_service_info.hpp:43
 
const void * response_type_support_impl_
Definition: custom_service_info.hpp:46
 
Definition: custom_service_info.hpp:41
 
Definition: TypeSupport.hpp:34
 
void * data
Definition: TypeSupport.hpp:37
 
rmw_fastrtps_shared_cpp::TypeSupport * response_type_support_
Definition: custom_service_info.hpp:45
 
const void * request_type_support_impl_
Definition: custom_service_info.hpp:44
 
ServiceListener * listener_
Definition: custom_service_info.hpp:49
 
struct CustomServiceRequest CustomServiceRequest
 
eprosima::fastrtps::Participant * participant_
Definition: custom_service_info.hpp:51
 
eprosima::fastcdr::FastBuffer * buffer_
Definition: custom_service_info.hpp:58
 
void attachCondition(std::mutex *conditionMutex, std::condition_variable *conditionVariable)
Definition: custom_service_info.hpp:142
 
void detachCondition()
Definition: custom_service_info.hpp:150
 
ServicePubListener * pub_listener_
Definition: custom_service_info.hpp:50
 
void onNewDataMessage(eprosima::fastrtps::Subscriber *sub)
Definition: custom_service_info.hpp:77
 
struct CustomServiceInfo CustomServiceInfo
 
eprosima::fastrtps::Subscriber * request_subscriber_
Definition: custom_service_info.hpp:47
 
ServiceListener(CustomServiceInfo *info)
Definition: custom_service_info.hpp:68
 
Definition: custom_service_info.hpp:172
 
CustomServiceRequest getRequest()
Definition: custom_service_info.hpp:118