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_CLIENT_INFO_HPP_
16 #define RMW_FASTRTPS_SHARED_CPP__CUSTOM_CLIENT_INFO_HPP_
19 #include <condition_variable>
26 #include "fastcdr/FastBuffer.h"
28 #include "fastrtps/subscriber/SampleInfo.h"
29 #include "fastrtps/subscriber/Subscriber.h"
30 #include "fastrtps/subscriber/SubscriberListener.h"
31 #include "fastrtps/participant/Participant.h"
32 #include "fastrtps/publisher/Publisher.h"
33 #include "fastrtps/publisher/PublisherListener.h"
71 : info_(info), list_has_data_(false),
72 conditionMutex_(nullptr), conditionVariable_(nullptr) {}
82 response.
buffer_.
reset(
new eprosima::fastcdr::FastBuffer());
89 if (eprosima::fastrtps::rtps::ALIVE == response.
sample_info_.sampleKind) {
97 if (conditionMutex_ !=
nullptr) {
103 list_has_data_.store(
true);
105 conditionVariable_->notify_one();
108 list_has_data_.store(
true);
120 if (conditionMutex_ !=
nullptr) {
122 return popResponse(response);
124 return popResponse(response);
131 conditionMutex_ = conditionMutex;
132 conditionVariable_ = conditionVariable;
139 conditionMutex_ =
nullptr;
140 conditionVariable_ =
nullptr;
146 return list_has_data_.load();
150 eprosima::fastrtps::Subscriber * sub,
151 eprosima::fastrtps::rtps::MatchingInfo & matchingInfo)
154 if (info_ ==
nullptr) {
157 if (eprosima::fastrtps::rtps::MATCHED_MATCHING == matchingInfo.status) {
158 publishers_.
insert(matchingInfo.remoteEndpointGuid);
159 }
else if (eprosima::fastrtps::rtps::REMOVED_MATCHING == matchingInfo.status) {
160 publishers_.
erase(matchingInfo.remoteEndpointGuid);
173 list_has_data_.store(!list.empty());
182 std::atomic_bool list_has_data_;
183 std::mutex * conditionMutex_ RCPPUTILS_TSA_GUARDED_BY(internalMutex_);
197 eprosima::fastrtps::Publisher * pub,
198 eprosima::fastrtps::rtps::MatchingInfo & matchingInfo)
201 if (info_ ==
nullptr) {
204 if (eprosima::fastrtps::rtps::MATCHED_MATCHING == matchingInfo.status) {
205 subscriptions_.
insert(matchingInfo.remoteEndpointGuid);
206 }
else if (eprosima::fastrtps::rtps::REMOVED_MATCHING == matchingInfo.status) {
207 subscriptions_.
erase(matchingInfo.remoteEndpointGuid);
219 #endif // RMW_FASTRTPS_SHARED_CPP__CUSTOM_CLIENT_INFO_HPP_
rmw_fastrtps_shared_cpp::TypeSupport * response_type_support_
Definition: custom_client_info.hpp:46
const void * impl
Definition: TypeSupport.hpp:38
bool hasData()
Definition: custom_client_info.hpp:144
std::unique_ptr< eprosima::fastcdr::FastBuffer > buffer_
Definition: custom_client_info.hpp:63
eprosima::fastrtps::rtps::GUID_t reader_guid_
Definition: custom_client_info.hpp:52
rmw_fastrtps_shared_cpp::TypeSupport * request_type_support_
Definition: custom_client_info.hpp:44
eprosima::fastrtps::rtps::SampleIdentity sample_identity_
Definition: custom_client_info.hpp:62
struct CustomClientResponse CustomClientResponse
std::atomic_size_t request_publisher_matched_count_
Definition: custom_client_info.hpp:57
Definition: TypeSupport.hpp:41
bool is_cdr_buffer
Definition: TypeSupport.hpp:36
void attachCondition(std::mutex *conditionMutex, std::condition_variable *conditionVariable)
Definition: custom_client_info.hpp:128
eprosima::fastrtps::Publisher * request_publisher_
Definition: custom_client_info.hpp:49
#define RCPPUTILS_TSA_REQUIRES(...)
void detachCondition()
Definition: custom_client_info.hpp:136
void onPublicationMatched(eprosima::fastrtps::Publisher *pub, eprosima::fastrtps::rtps::MatchingInfo &matchingInfo)
Definition: custom_client_info.hpp:196
const char * typesupport_identifier_
Definition: custom_client_info.hpp:54
Definition: custom_client_info.hpp:188
const void * response_type_support_impl_
Definition: custom_client_info.hpp:47
Definition: TypeSupport.hpp:34
void * data
Definition: TypeSupport.hpp:37
void onSubscriptionMatched(eprosima::fastrtps::Subscriber *sub, eprosima::fastrtps::rtps::MatchingInfo &matchingInfo)
Definition: custom_client_info.hpp:149
std::atomic_size_t response_subscriber_matched_count_
Definition: custom_client_info.hpp:56
Definition: custom_client_info.hpp:67
Definition: custom_client_info.hpp:42
eprosima::fastrtps::rtps::GUID_t writer_guid_
Definition: custom_client_info.hpp:51
ClientListener * listener_
Definition: custom_client_info.hpp:50
Definition: custom_client_info.hpp:60
eprosima::fastrtps::Participant * participant_
Definition: custom_client_info.hpp:53
struct CustomClientInfo CustomClientInfo
void onNewDataMessage(eprosima::fastrtps::Subscriber *sub)
Definition: custom_client_info.hpp:76
ClientListener(CustomClientInfo *info)
Definition: custom_client_info.hpp:70
ClientPubListener * pub_listener_
Definition: custom_client_info.hpp:55
const void * request_type_support_impl_
Definition: custom_client_info.hpp:45
eprosima::fastrtps::SampleInfo_t sample_info_
Definition: custom_client_info.hpp:64
eprosima::fastrtps::Subscriber * response_subscriber_
Definition: custom_client_info.hpp:48
bool getResponse(CustomClientResponse &response)
Definition: custom_client_info.hpp:116
ClientPubListener(CustomClientInfo *info)
Definition: custom_client_info.hpp:191