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