From 55da7f3e57cdaa1b241d4cc6c8ac3ff1ee858c4d Mon Sep 17 00:00:00 2001 From: KerstinKeller <KerstinKeller@users.noreply.github.com> Date: Thu, 30 Jan 2025 13:55:31 +0100 Subject: [PATCH] [core] split `GetTopicNames` into `GetPublishedTopicNames` and `GetSubscribedTopicNames`. (#1969) --- ecal/core/include/ecal/registration.h | 27 ++++++--- .../src/registration/ecal_registration.cpp | 59 ++++++++++++------- .../massive_pub_sub/src/massive_pub_sub.cpp | 16 +++-- .../src/monitoring_get_services.cpp | 2 +- .../src/monitoring_get_topics.cpp | 25 ++------ .../src/registration_getclients.cpp | 14 +++-- .../src/registration_getpublisherids.cpp | 8 ++- .../src/registration_getservices.cpp | 16 +++-- .../src/registration_getsubscriberids.cpp | 8 ++- .../src/registration_gettopics.cpp | 35 +++++++---- lang/python/core/src/ecal_clang.cpp | 7 ++- .../ping_client_dyn/src/ping_client_dyn.cpp | 4 +- 12 files changed, 138 insertions(+), 83 deletions(-) diff --git a/ecal/core/include/ecal/registration.h b/ecal/core/include/ecal/registration.h index 21b3e39d36..d29bb13345 100644 --- a/ecal/core/include/ecal/registration.h +++ b/ecal/core/include/ecal/registration.h @@ -66,7 +66,7 @@ namespace eCAL * * @return Set of topic id's. **/ - ECAL_API std::set<STopicId> GetPublisherIDs(); + ECAL_API bool GetPublisherIDs(std::set<STopicId>& topic_ids_); /** * @brief Get data type information with quality for specific publisher. @@ -98,7 +98,7 @@ namespace eCAL * * @return Set of topic id's. **/ - ECAL_API std::set<STopicId> GetSubscriberIDs(); + ECAL_API bool GetSubscriberIDs(std::set<STopicId>& topic_ids_); /** * @brief Get data type information with quality for specific subscriber. @@ -130,7 +130,7 @@ namespace eCAL * * @return Set of service id's. **/ - ECAL_API std::set<SServiceId> GetServerIDs(); + ECAL_API bool GetServerIDs(std::set<SServiceId>& service_ids_); /** * @brief Get service method information for a specific server. @@ -144,7 +144,7 @@ namespace eCAL * * @return Set of service id's. **/ - ECAL_API std::set<SServiceId> GetClientIDs(); + ECAL_API bool GetClientIDs(std::set<SServiceId>& service_ids_); /** * @brief Get service method information for a specific client. @@ -154,25 +154,36 @@ namespace eCAL ECAL_API bool GetClientInfo(const SServiceId& id_, ServiceMethodInformationSetT& service_method_info_); /** - * @brief Get all topic names. + * @brief Get all names of topics that are being published. + * This is a convenience function. + * It calls GetPublisherIDs() and filters by name * * @param topic_names_ Set to store the topic names. **/ - ECAL_API void GetTopicNames(std::set<std::string>& topic_names_); + ECAL_API bool GetPublishedTopicNames(std::set<std::string>& topic_names_); /** + * @brief Get all names of topics that are being subscribed + * This is a convenience function. + * It calls GetSubscriberIDs() and filters by name + * + * @param topic_names_ Set to store the topic names. + **/ + ECAL_API bool GetSubscribedTopicNames(std::set<std::string>& topic_names_); + + /** * @brief Get the pairs of service name / method name of all eCAL Servers. * * @param service_method_names_ Set to store the service/method names (Set { (ServiceName, MethodName) }). **/ - ECAL_API void GetServerMethodNames(std::set<SServiceMethod>& server_method_names_); + ECAL_API bool GetServerMethodNames(std::set<SServiceMethod>& server_method_names_); /** * @brief Get the pairs of service name / method name of all eCAL Clients. * * @param client_method_names_ Set to store the client/method names (Set { (ClientName, MethodName) }). **/ - ECAL_API void GetClientMethodNames(std::set<SServiceMethod>& client_method_names_); + ECAL_API bool GetClientMethodNames(std::set<SServiceMethod>& client_method_names_); } } diff --git a/ecal/core/src/registration/ecal_registration.cpp b/ecal/core/src/registration/ecal_registration.cpp index d7a9287600..d286255a29 100644 --- a/ecal/core/src/registration/ecal_registration.cpp +++ b/ecal/core/src/registration/ecal_registration.cpp @@ -34,10 +34,11 @@ namespace eCAL { namespace Registration { - std::set<STopicId> GetPublisherIDs() + bool GetPublisherIDs(std::set<STopicId>& topic_ids_) { - if (g_descgate() == nullptr) return std::set<STopicId>(); - return g_descgate()->GetPublisherIDs(); + if (g_descgate() == nullptr) return false; + topic_ids_ = std::move(g_descgate()->GetPublisherIDs()); + return true; } bool GetPublisherInfo(const STopicId& id_, SDataTypeInformation& topic_info_) @@ -58,10 +59,11 @@ namespace eCAL return g_descgate()->RemPublisherEventCallback(token_); } - std::set<STopicId> GetSubscriberIDs() + bool GetSubscriberIDs(std::set<STopicId>& topic_ids_) { - if (g_descgate() == nullptr) return std::set<STopicId>(); - return g_descgate()->GetSubscriberIDs(); + if (g_descgate() == nullptr) return false; + topic_ids_ = std::move(g_descgate()->GetSubscriberIDs()); + return true; } bool GetSubscriberInfo(const STopicId& id_, SDataTypeInformation& topic_info_) @@ -82,10 +84,11 @@ namespace eCAL return g_descgate()->RemSubscriberEventCallback(token_); } - std::set<SServiceId> GetServerIDs() + bool GetServerIDs(std::set<SServiceId>& service_ids_) { - if (g_descgate() == nullptr) return std::set<SServiceId>(); - return g_descgate()->GetServerIDs(); + if (g_descgate() == nullptr) return false; + service_ids_ = std::move(g_descgate()->GetServerIDs()); + return true; } bool GetServerInfo(const SServiceId& id_, ServiceMethodInformationSetT& service_info_) @@ -94,10 +97,11 @@ namespace eCAL return g_descgate()->GetServerInfo(id_, service_info_); } - std::set<SServiceId> GetClientIDs() + bool GetClientIDs(std::set<SServiceId>& service_ids_) { - if (g_descgate() == nullptr) return std::set<SServiceId>(); - return g_descgate()->GetClientIDs(); + if (g_descgate() == nullptr) return false; + service_ids_ = std::move(g_descgate()->GetClientIDs()); + return true; } bool GetClientInfo(const SServiceId& id_, ServiceMethodInformationSetT& service_info_) @@ -106,29 +110,41 @@ namespace eCAL return g_descgate()->GetClientInfo(id_, service_info_); } - void GetTopicNames(std::set<std::string>& topic_names_) + bool GetPublishedTopicNames(std::set<std::string>& topic_names_) { topic_names_.clear(); - // get publisher & subscriber id sets and insert names into the topic_names set - const std::set<STopicId> pub_id_set = GetPublisherIDs(); + // get publisher id sets and insert names into the topic_names set + std::set<STopicId> pub_id_set; + bool return_value = GetPublisherIDs(pub_id_set); for (const auto& pub_id : pub_id_set) { topic_names_.insert(pub_id.topic_name); } - const std::set<STopicId> sub_id_set = GetSubscriberIDs(); + return return_value; + } + + bool GetSubscribedTopicNames(std::set<std::string>& topic_names_) + { + topic_names_.clear(); + + // get subscriber id sets and insert names into the topic_names set + std::set<STopicId> sub_id_set; + bool return_value = GetSubscriberIDs(sub_id_set); for (const auto& sub_id : sub_id_set) { topic_names_.insert(sub_id.topic_name); } + return return_value; } - void GetServerMethodNames(std::set<SServiceMethod>& server_method_names_) + bool GetServerMethodNames(std::set<SServiceMethod>& server_method_names_) { server_method_names_.clear(); // get servers id set and insert names into the server_method_names_ set - const std::set<SServiceId> server_id_set = GetServerIDs(); + std::set<SServiceId> server_id_set; + bool return_value = GetServerIDs(server_id_set); for (const auto& server_id : server_id_set) { eCAL::ServiceMethodInformationSetT methods; @@ -138,14 +154,16 @@ namespace eCAL server_method_names_.insert({ server_id.service_name, method.method_name }); } } + return return_value; } - void GetClientMethodNames(std::set<SServiceMethod>& client_method_names_) + bool GetClientMethodNames(std::set<SServiceMethod>& client_method_names_) { client_method_names_.clear(); // get clients id set and insert names into the client_method_names set - const std::set<SServiceId> client_id_set = GetClientIDs(); + std::set<SServiceId> client_id_set; + bool return_value = GetClientIDs(client_id_set); for (const auto& client_id : client_id_set) { eCAL::ServiceMethodInformationSetT methods; @@ -155,6 +173,7 @@ namespace eCAL client_method_names_.insert({ client_id.service_name, method.method_name }); } } + return return_value; } } diff --git a/ecal/samples/cpp/benchmarks/massive_pub_sub/src/massive_pub_sub.cpp b/ecal/samples/cpp/benchmarks/massive_pub_sub/src/massive_pub_sub.cpp index e804693385..5f829708b9 100644 --- a/ecal/samples/cpp/benchmarks/massive_pub_sub/src/massive_pub_sub.cpp +++ b/ecal/samples/cpp/benchmarks/massive_pub_sub/src/massive_pub_sub.cpp @@ -158,8 +158,14 @@ int main() size_t num_sub(0); while ((num_pub < publisher_number) || (num_sub < subscriber_number)) { - num_pub = eCAL::Registration::GetPublisherIDs().size(); - num_sub = eCAL::Registration::GetSubscriberIDs().size(); + std::set<eCAL::STopicId> publisher_ids; + std::set<eCAL::STopicId> subscriber_ids; + + eCAL::Registration::GetPublisherIDs(publisher_ids); + eCAL::Registration::GetSubscriberIDs(subscriber_ids); + + num_pub = publisher_ids.size(); + num_sub = subscriber_ids.size(); std::cout << "Registered publisher : " << num_pub << std::endl; std::cout << "Registered subscriber: " << num_sub << std::endl; @@ -183,7 +189,8 @@ int main() // start time measurement auto start_time = std::chrono::high_resolution_clock::now(); - const auto pub_ids = eCAL::Registration::GetPublisherIDs(); + std::set<eCAL::STopicId> pub_ids; + eCAL::Registration::GetPublisherIDs(pub_ids); num_pub = pub_ids.size(); for (const auto& id : pub_ids) { @@ -200,7 +207,8 @@ int main() } // check creation events - const std::set<eCAL::STopicId> publisher_ids = eCAL::Registration::GetPublisherIDs(); + std::set<eCAL::STopicId> publisher_ids; + eCAL::Registration::GetPublisherIDs(publisher_ids); std::cout << "Number of publisher creation events " << created_publisher_num << std::endl; std::cout << "Size of publisher creation id set " << created_publisher_ids.size() << std::endl; //std::cout << "Publisher creation id sets are equal " << (publisher_ids == created_publisher_ids) << std::endl; diff --git a/ecal/samples/cpp/monitoring/monitoring_get_services/src/monitoring_get_services.cpp b/ecal/samples/cpp/monitoring/monitoring_get_services/src/monitoring_get_services.cpp index 666403ebc3..13fa8ea722 100644 --- a/ecal/samples/cpp/monitoring/monitoring_get_services/src/monitoring_get_services.cpp +++ b/ecal/samples/cpp/monitoring/monitoring_get_services/src/monitoring_get_services.cpp @@ -43,7 +43,7 @@ int main() start_time = std::chrono::steady_clock::now(); for (run = 0; run < runs; ++run) { - server_method_id_set = eCAL::Registration::GetServerIDs(); + eCAL::Registration::GetServerIDs(server_method_id_set); } auto num_services = server_method_id_set.size(); diff --git a/ecal/samples/cpp/monitoring/monitoring_get_topics/src/monitoring_get_topics.cpp b/ecal/samples/cpp/monitoring/monitoring_get_topics/src/monitoring_get_topics.cpp index b5dc119110..91fa4d9971 100644 --- a/ecal/samples/cpp/monitoring/monitoring_get_topics/src/monitoring_get_topics.cpp +++ b/ecal/samples/cpp/monitoring/monitoring_get_topics/src/monitoring_get_topics.cpp @@ -44,30 +44,13 @@ int main() start_time = std::chrono::steady_clock::now(); for (run = 0; run < runs; ++run) { - topic_id_pub_set = eCAL::Registration::GetPublisherIDs(); - topic_id_sub_set = eCAL::Registration::GetSubscriberIDs(); + eCAL::Registration::GetPublisherIDs(topic_id_pub_set); + eCAL::Registration::GetSubscriberIDs(topic_id_pub_set); } - auto num_topics = topic_id_pub_set.size() + topic_id_sub_set.size(); + auto num_entities = topic_id_pub_set.size() + topic_id_sub_set.size(); auto diff_time = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start_time); - std::cout << "GetTopics : " << static_cast<double>(diff_time.count()) / runs << " ms" << " (" << num_topics << " topics)" << std::endl; - } - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - - // GetTopicNames - { - std::set<std::string> topic_names; - - start_time = std::chrono::steady_clock::now(); - for (run = 0; run < runs; ++run) - { - eCAL::Registration::GetTopicNames(topic_names); - } - - auto num_topics = topic_names.size(); - auto diff_time = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start_time); - std::cout << "GetTopicsNames : " << static_cast<double>(diff_time.count()) / runs << " ms" << " (" << num_topics << " topics)" << std::endl; - std::cout << std::endl; + std::cout << "GetTopics : " << static_cast<double>(diff_time.count()) / runs << " ms" << " (" << num_entities << " entities)" << std::endl; } std::this_thread::sleep_for(std::chrono::milliseconds(500)); } diff --git a/ecal/tests/cpp/registration_test_public/src/registration_getclients.cpp b/ecal/tests/cpp/registration_test_public/src/registration_getclients.cpp index a6ae0437c6..0aaf27664c 100644 --- a/ecal/tests/cpp/registration_test_public/src/registration_getclients.cpp +++ b/ecal/tests/cpp/registration_test_public/src/registration_getclients.cpp @@ -55,6 +55,7 @@ class ClientsTestFixture : public ::testing::TestWithParam<ClientsTestParams> TEST_P(ClientsTestFixture, ClientExpiration) { std::set<eCAL::SServiceId> id_set; + bool get_client_ids_succeeded = false; // create simple client and let it expire { @@ -71,7 +72,8 @@ TEST_P(ClientsTestFixture, ClientExpiration) eCAL::Process::SleepMS(2 * CMN_REGISTRATION_REFRESH_MS); // get all clients - id_set = eCAL::Registration::GetClientIDs(); + get_client_ids_succeeded = eCAL::Registration::GetClientIDs(id_set); + EXPECT_TRUE(get_client_ids_succeeded) << "GetClientIDs call failed"; // check size EXPECT_EQ(id_set.size(), 1); @@ -90,7 +92,8 @@ TEST_P(ClientsTestFixture, ClientExpiration) eCAL::Process::SleepMS(CMN_MONITORING_TIMEOUT_MS); // get all clients again, client should not be expired - id_set = eCAL::Registration::GetClientIDs(); + get_client_ids_succeeded = eCAL::Registration::GetClientIDs(id_set); + EXPECT_TRUE(get_client_ids_succeeded) << "GetClientIDs call failed"; // check size EXPECT_EQ(id_set.size(), 1); @@ -101,7 +104,8 @@ TEST_P(ClientsTestFixture, ClientExpiration) // get all clients again, all clients // should be removed from the map - id_set = eCAL::Registration::GetClientIDs(); + get_client_ids_succeeded = eCAL::Registration::GetClientIDs(id_set); + EXPECT_TRUE(get_client_ids_succeeded) << "GetClientIDs call failed"; // check size EXPECT_EQ(id_set.size(), 0); @@ -124,7 +128,9 @@ TEST_P(ClientsTestFixture, GetClientIDs) eCAL::Process::SleepMS(2 * CMN_REGISTRATION_REFRESH_MS); // get client - auto id_set = eCAL::Registration::GetClientIDs(); + std::set<eCAL::SServiceId> id_set; + auto call_successful = eCAL::Registration::GetClientIDs(id_set); + EXPECT_TRUE(call_successful); EXPECT_EQ(1, id_set.size()); if (id_set.size() > 0) { diff --git a/ecal/tests/cpp/registration_test_public/src/registration_getpublisherids.cpp b/ecal/tests/cpp/registration_test_public/src/registration_getpublisherids.cpp index 52ceb47bf7..1ad1d16832 100644 --- a/ecal/tests/cpp/registration_test_public/src/registration_getpublisherids.cpp +++ b/ecal/tests/cpp/registration_test_public/src/registration_getpublisherids.cpp @@ -75,9 +75,11 @@ TEST_P(TestFixture, GetPublisherIDsReturnsCorrectNumber) eCAL::Process::SleepMS(2 * GetParam().configuration.registration.registration_refresh); // get the list of publisher IDs - const auto pub_ids1 = eCAL::Registration::GetPublisherIDs(); + std::set<eCAL::STopicId> pub_ids1; + const auto get_publisher_ids_succeeded = eCAL::Registration::GetPublisherIDs(pub_ids1); // verify the number of publishers created + EXPECT_TRUE(get_publisher_ids_succeeded) << "GetPublisherIDs call failed"; ASSERT_EQ(pub_ids1.size(), GetParam().publisher_count); } @@ -85,9 +87,11 @@ TEST_P(TestFixture, GetPublisherIDsReturnsCorrectNumber) eCAL::Process::SleepMS(GetParam().configuration.registration.registration_timeout); // get the list of publisher IDs - const auto pub_ids2 = eCAL::Registration::GetPublisherIDs(); + std::set<eCAL::STopicId> pub_ids2; + const auto get_publisher_ids_succeeded = eCAL::Registration::GetPublisherIDs(pub_ids2); // all publisher should be timeouted + EXPECT_TRUE(get_publisher_ids_succeeded) << "GetPublisherIDs call failed"; ASSERT_EQ(pub_ids2.size(), 0); } diff --git a/ecal/tests/cpp/registration_test_public/src/registration_getservices.cpp b/ecal/tests/cpp/registration_test_public/src/registration_getservices.cpp index eef4d15484..89b5230f6b 100644 --- a/ecal/tests/cpp/registration_test_public/src/registration_getservices.cpp +++ b/ecal/tests/cpp/registration_test_public/src/registration_getservices.cpp @@ -56,6 +56,7 @@ class ServicesTestFixture : public ::testing::TestWithParam<ServicesTestParams> TEST_P(ServicesTestFixture, ServiceExpiration) { std::set<eCAL::SServiceId> id_set; + bool get_server_ids_succeeded = false; // create simple service and let it expire { @@ -67,7 +68,8 @@ TEST_P(ServicesTestFixture, ServiceExpiration) eCAL::Process::SleepMS(2 * CMN_REGISTRATION_REFRESH_MS); // get all services - id_set = eCAL::Registration::GetServerIDs(); + get_server_ids_succeeded = eCAL::Registration::GetServerIDs(id_set); + EXPECT_TRUE(get_server_ids_succeeded) << "GetServerIDs call failed"; // check size EXPECT_EQ(id_set.size(), 1); @@ -86,7 +88,8 @@ TEST_P(ServicesTestFixture, ServiceExpiration) eCAL::Process::SleepMS(CMN_MONITORING_TIMEOUT_MS); // get all services again, service should not be expired - id_set = eCAL::Registration::GetServerIDs(); + get_server_ids_succeeded = eCAL::Registration::GetServerIDs(id_set); + EXPECT_TRUE(get_server_ids_succeeded) << "GetServerIDs call failed"; // check size EXPECT_EQ(id_set.size(), 1); @@ -97,7 +100,8 @@ TEST_P(ServicesTestFixture, ServiceExpiration) // get all services again, all services // should be removed from the map - id_set = eCAL::Registration::GetServerIDs(); + get_server_ids_succeeded = eCAL::Registration::GetServerIDs(id_set); + EXPECT_TRUE(get_server_ids_succeeded) << "GetServerIDs call failed"; // check size EXPECT_EQ(id_set.size(), 0); @@ -123,8 +127,10 @@ TEST_P(ServicesTestFixture, GetServiceIDs) eCAL::Process::SleepMS(2 * CMN_REGISTRATION_REFRESH_MS); // get server - auto id_set = eCAL::Registration::GetServerIDs(); - EXPECT_EQ(1, id_set.size()); + std::set<eCAL::SServiceId> id_set; + const auto success = eCAL::Registration::GetServerIDs(id_set); + EXPECT_TRUE(success) << "GetServerIDs should be successfully executed"; + EXPECT_EQ(1, id_set.size()) << "There should be 1 server in the system"; if (id_set.size() > 0) { eCAL::ServiceMethodInformationSetT methods; diff --git a/ecal/tests/cpp/registration_test_public/src/registration_getsubscriberids.cpp b/ecal/tests/cpp/registration_test_public/src/registration_getsubscriberids.cpp index 9aa47dd26d..e9a65abec9 100644 --- a/ecal/tests/cpp/registration_test_public/src/registration_getsubscriberids.cpp +++ b/ecal/tests/cpp/registration_test_public/src/registration_getsubscriberids.cpp @@ -75,9 +75,11 @@ TEST_P(TestFixture, GetSubscriberIDsReturnsCorrectNumber) eCAL::Process::SleepMS(2 * GetParam().configuration.registration.registration_refresh); // get the list of subscriber IDs - const auto sub_ids1 = eCAL::Registration::GetSubscriberIDs(); + std::set<eCAL::STopicId> sub_ids1; + const bool call_successful = eCAL::Registration::GetSubscriberIDs(sub_ids1); // verify the number of subscribers created + ASSERT_TRUE(call_successful) << "GetSubscriberIDs returned false"; ASSERT_EQ(sub_ids1.size(), GetParam().subscriber_count); } @@ -85,9 +87,11 @@ TEST_P(TestFixture, GetSubscriberIDsReturnsCorrectNumber) eCAL::Process::SleepMS(2 * GetParam().configuration.registration.registration_timeout); // get the list of subscriber IDs - const auto sub_ids2 = eCAL::Registration::GetSubscriberIDs(); + std::set<eCAL::STopicId> sub_ids2; + const bool call_successful = eCAL::Registration::GetSubscriberIDs(sub_ids2); // all subscriber should be timeouted + ASSERT_TRUE(call_successful) << "GetSubscriberIDs returned false"; ASSERT_EQ(sub_ids2.size(), 0); } diff --git a/ecal/tests/cpp/registration_test_public/src/registration_gettopics.cpp b/ecal/tests/cpp/registration_test_public/src/registration_gettopics.cpp index 9385da5da4..51da90e9a4 100644 --- a/ecal/tests/cpp/registration_test_public/src/registration_gettopics.cpp +++ b/ecal/tests/cpp/registration_test_public/src/registration_gettopics.cpp @@ -41,6 +41,8 @@ TEST(core_cpp_registration_public, GetTopics) std::set<eCAL::STopicId> topic_id_pub_set; std::set<eCAL::STopicId> topic_id_sub_set; + bool get_publisher_ids_succeeded; + bool get_subscriber_ids_succeeded; // create and check a few pub/sub entities { @@ -64,7 +66,8 @@ TEST(core_cpp_registration_public, GetTopics) eCAL::Process::SleepMS(2 * CMN_REGISTRATION_REFRESH_MS); // get all publisher topics and check size - topic_id_pub_set = eCAL::Registration::GetPublisherIDs(); + get_publisher_ids_succeeded = eCAL::Registration::GetPublisherIDs(topic_id_pub_set); + EXPECT_TRUE(get_publisher_ids_succeeded) << "GetPublisherIDs call failed"; EXPECT_EQ(topic_id_pub_set.size(), 3); // check publisher types and descriptions @@ -77,7 +80,8 @@ TEST(core_cpp_registration_public, GetTopics) } // get all subscriber topics and check size - topic_id_sub_set = eCAL::Registration::GetSubscriberIDs(); + get_publisher_ids_succeeded = eCAL::Registration::GetSubscriberIDs(topic_id_sub_set); + EXPECT_TRUE(get_publisher_ids_succeeded) << "GetSubscriberIDs call failed"; EXPECT_EQ(topic_id_sub_set.size(), 2); // check subscriber types and descriptions @@ -93,11 +97,13 @@ TEST(core_cpp_registration_public, GetTopics) eCAL::Process::SleepMS(CMN_MONITORING_TIMEOUT_MS); // get all publisher topics and check size (should not be expired) - topic_id_pub_set = eCAL::Registration::GetPublisherIDs(); + get_publisher_ids_succeeded = eCAL::Registration::GetPublisherIDs(topic_id_pub_set); + EXPECT_TRUE(get_publisher_ids_succeeded) << "GetPublisherIDs call failed"; EXPECT_EQ(topic_id_pub_set.size(), 3); // get all subscriber topics and check size (should not be expired) - topic_id_sub_set = eCAL::Registration::GetSubscriberIDs(); + get_subscriber_ids_succeeded = eCAL::Registration::GetSubscriberIDs(topic_id_sub_set); + EXPECT_TRUE(get_subscriber_ids_succeeded) << "GetSubscriberIDs call failed"; EXPECT_EQ(topic_id_sub_set.size(), 2); // now destroy publisher pub1 and subscriber sub1 @@ -110,11 +116,13 @@ TEST(core_cpp_registration_public, GetTopics) eCAL::Process::SleepMS(2 * CMN_REGISTRATION_REFRESH_MS); // get all publisher topics and check size (pub1 should be expired) - topic_id_pub_set = eCAL::Registration::GetPublisherIDs(); + get_publisher_ids_succeeded = eCAL::Registration::GetPublisherIDs(topic_id_pub_set); + EXPECT_TRUE(get_publisher_ids_succeeded) << "GetPublisherIDs call failed"; EXPECT_EQ(topic_id_pub_set.size(), 2); // get all subscriber topics and check size (sub1 should be expired) - topic_id_sub_set = eCAL::Registration::GetSubscriberIDs(); + get_subscriber_ids_succeeded = eCAL::Registration::GetSubscriberIDs(topic_id_sub_set); + EXPECT_TRUE(get_subscriber_ids_succeeded) << "GetSubscriberIDs call failed"; EXPECT_EQ(topic_id_sub_set.size(), 1); } @@ -122,11 +130,13 @@ TEST(core_cpp_registration_public, GetTopics) eCAL::Process::SleepMS(2 * CMN_REGISTRATION_REFRESH_MS); // get all publisher topics and check size (all publisher should be expired) - topic_id_pub_set = eCAL::Registration::GetPublisherIDs(); + get_publisher_ids_succeeded = eCAL::Registration::GetPublisherIDs(topic_id_pub_set); + EXPECT_TRUE(get_publisher_ids_succeeded) << "GetPublisherIDs call failed"; EXPECT_EQ(topic_id_pub_set.size(), 0); // get all subscriber topics and check size (all subscriber should be expired) - topic_id_sub_set = eCAL::Registration::GetSubscriberIDs(); + get_subscriber_ids_succeeded = eCAL::Registration::GetSubscriberIDs(topic_id_sub_set); + EXPECT_TRUE(get_subscriber_ids_succeeded) << "GetSubscriberIDs call failed"; EXPECT_EQ(topic_id_sub_set.size(), 0); // finalize eCAL API @@ -166,14 +176,13 @@ TEST(core_cpp_registration_public, GetTopicsParallel) size_t number_publishers_seen = 0; size_t max_number_publishers_seen = 0; - std::set<std::string> tmp_topic_names; - std::set<eCAL::STopicId> tmp_topic_ids; + std::set<eCAL::STopicId> tmp_publisher_ids; do { - eCAL::Registration::GetTopicNames(tmp_topic_names); - tmp_topic_ids = eCAL::Registration::GetPublisherIDs(); + std::set<eCAL::STopicId> tmp_publisher_ids; + eCAL::Registration::GetPublisherIDs(tmp_publisher_ids); - number_publishers_seen = tmp_topic_names.size(); + number_publishers_seen = tmp_publisher_ids.size(); max_number_publishers_seen = std::max(max_number_publishers_seen, number_publishers_seen); std::this_thread::sleep_for(std::chrono::milliseconds(500)); } while (!testing_completed); diff --git a/lang/python/core/src/ecal_clang.cpp b/lang/python/core/src/ecal_clang.cpp index cdc8d205d5..0b6ce7e296 100644 --- a/lang/python/core/src/ecal_clang.cpp +++ b/lang/python/core/src/ecal_clang.cpp @@ -48,8 +48,10 @@ namespace bool GetTopicDataTypeInformation(const char* topic_name_, eCAL::SDataTypeInformation& topic_info_) { + std::set<eCAL::STopicId> pub_ids; + eCAL::Registration::GetPublisherIDs(pub_ids); // try to find topic name in publisher set - for (const auto& pub_id : eCAL::Registration::GetPublisherIDs()) + for (const auto& pub_id : pub_ids) { if (pub_id.topic_name == topic_name_) { @@ -57,7 +59,8 @@ namespace } } // try to find topic name in subscriber set - const auto& sub_ids = eCAL::Registration::GetSubscriberIDs(); + std::set<eCAL::STopicId> sub_ids; + eCAL::Registration::GetSubscriberIDs(sub_ids); for (const auto& sub_id : sub_ids) { if (sub_id.topic_name == topic_name_) diff --git a/serialization/protobuf/samples/services/ping_client_dyn/src/ping_client_dyn.cpp b/serialization/protobuf/samples/services/ping_client_dyn/src/ping_client_dyn.cpp index 19fca20cc6..15478cd2c1 100644 --- a/serialization/protobuf/samples/services/ping_client_dyn/src/ping_client_dyn.cpp +++ b/serialization/protobuf/samples/services/ping_client_dyn/src/ping_client_dyn.cpp @@ -51,7 +51,9 @@ int main() std::string req_desc; std::string resp_type; std::string resp_desc; - auto service_ids = eCAL::Registration::GetServerIDs(); + + std::set<eCAL::SServiceId> service_ids; + eCAL::Registration::GetServerIDs(service_ids); bool service_info_found(false); for (const auto& service_id : service_ids) {