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>
27 #include "fastcdr/FastBuffer.h"
29 #include "fastdds/dds/core/status/PublicationMatchedStatus.hpp"
30 #include "fastdds/dds/core/status/SubscriptionMatchedStatus.hpp"
31 #include "fastdds/dds/publisher/DataWriter.hpp"
32 #include "fastdds/dds/publisher/DataWriterListener.hpp"
33 #include "fastdds/dds/subscriber/DataReader.hpp"
34 #include "fastdds/dds/subscriber/DataReaderListener.hpp"
35 #include "fastdds/dds/subscriber/SampleInfo.hpp"
36 #include "fastdds/dds/topic/TypeSupport.hpp"
38 #include "fastdds/rtps/common/Guid.h"
39 #include "fastdds/rtps/common/InstanceHandle.h"
40 #include "fastdds/rtps/common/SampleIdentity.h"
82 : info_(info), list_has_data_(false),
83 conditionMutex_(nullptr), conditionVariable_(nullptr) {}
93 response.
buffer_.
reset(
new eprosima::fastcdr::FastBuffer());
99 if (reader->take_next_sample(&data, &response.
sample_info_) == ReturnCode_t::RETCODE_OK) {
108 if (conditionMutex_ !=
nullptr) {
114 list_has_data_.store(
true);
116 conditionVariable_->notify_one();
119 list_has_data_.store(
true);
131 if (conditionMutex_ !=
nullptr) {
133 return popResponse(response);
135 return popResponse(response);
142 conditionMutex_ = conditionMutex;
143 conditionVariable_ = conditionVariable;
150 conditionMutex_ =
nullptr;
151 conditionVariable_ =
nullptr;
157 return list_has_data_.load();
161 eprosima::fastdds::dds::DataReader * ,
162 const eprosima::fastdds::dds::SubscriptionMatchedStatus & info)
final
164 if (info_ ==
nullptr) {
167 if (info.current_count_change == 1) {
168 publishers_.
insert(eprosima::fastrtps::rtps::iHandle2GUID(info.last_publication_handle));
169 }
else if (info.current_count_change == -1) {
170 publishers_.
erase(eprosima::fastrtps::rtps::iHandle2GUID(info.last_publication_handle));
183 list_has_data_.store(!list.empty());
192 std::atomic_bool list_has_data_;
193 std::mutex * conditionMutex_ RCPPUTILS_TSA_GUARDED_BY(internalMutex_);
207 eprosima::fastdds::dds::DataWriter * ,
208 const eprosima::fastdds::dds::PublicationMatchedStatus & info)
final
210 if (info_ ==
nullptr) {
213 if (info.current_count_change == 1) {
214 subscriptions_.
insert(eprosima::fastrtps::rtps::iHandle2GUID(info.last_subscription_handle));
215 }
else if (info.current_count_change == -1) {
216 subscriptions_.
erase(eprosima::fastrtps::rtps::iHandle2GUID(info.last_subscription_handle));
228 #endif // RMW_FASTRTPS_SHARED_CPP__CUSTOM_CLIENT_INFO_HPP_
const void * impl
Definition: TypeSupport.hpp:41
bool hasData()
Definition: custom_client_info.hpp:155
std::unique_ptr< eprosima::fastcdr::FastBuffer > buffer_
Definition: custom_client_info.hpp:74
eprosima::fastrtps::rtps::GUID_t reader_guid_
Definition: custom_client_info.hpp:63
eprosima::fastrtps::rtps::SampleIdentity sample_identity_
Definition: custom_client_info.hpp:73
struct CustomClientResponse CustomClientResponse
std::atomic_size_t request_publisher_matched_count_
Definition: custom_client_info.hpp:68
bool is_cdr_buffer
Definition: TypeSupport.hpp:39
void attachCondition(std::mutex *conditionMutex, std::condition_variable *conditionVariable)
Definition: custom_client_info.hpp:139
#define RCPPUTILS_TSA_REQUIRES(...)
void detachCondition()
Definition: custom_client_info.hpp:147
const char * typesupport_identifier_
Definition: custom_client_info.hpp:65
Definition: custom_client_info.hpp:198
std::string response_topic_
Definition: custom_client_info.hpp:59
const void * response_type_support_impl_
Definition: custom_client_info.hpp:54
Definition: TypeSupport.hpp:37
void * data
Definition: TypeSupport.hpp:40
void on_publication_matched(eprosima::fastdds::dds::DataWriter *, const eprosima::fastdds::dds::PublicationMatchedStatus &info) final
Definition: custom_client_info.hpp:206
void on_data_available(eprosima::fastdds::dds::DataReader *reader)
Definition: custom_client_info.hpp:87
eprosima::fastdds::dds::DataWriter * request_writer_
Definition: custom_client_info.hpp:56
std::atomic_size_t response_subscriber_matched_count_
Definition: custom_client_info.hpp:67
Definition: custom_client_info.hpp:78
Definition: custom_client_info.hpp:49
eprosima::fastrtps::rtps::GUID_t writer_guid_
Definition: custom_client_info.hpp:62
std::string request_topic_
Definition: custom_client_info.hpp:58
ClientListener * listener_
Definition: custom_client_info.hpp:61
Definition: custom_client_info.hpp:71
void on_subscription_matched(eprosima::fastdds::dds::DataReader *, const eprosima::fastdds::dds::SubscriptionMatchedStatus &info) final
Definition: custom_client_info.hpp:160
struct CustomClientInfo CustomClientInfo
eprosima::fastdds::dds::TypeSupport request_type_support_
Definition: custom_client_info.hpp:51
ClientListener(CustomClientInfo *info)
Definition: custom_client_info.hpp:81
eprosima::fastdds::dds::SampleInfo sample_info_
Definition: custom_client_info.hpp:75
ClientPubListener * pub_listener_
Definition: custom_client_info.hpp:66
eprosima::fastdds::dds::TypeSupport response_type_support_
Definition: custom_client_info.hpp:53
const void * request_type_support_impl_
Definition: custom_client_info.hpp:52
bool getResponse(CustomClientResponse &response)
Definition: custom_client_info.hpp:127
eprosima::fastdds::dds::DataReader * response_reader_
Definition: custom_client_info.hpp:55
ClientPubListener(CustomClientInfo *info)
Definition: custom_client_info.hpp:201