@@ -1738,15 +1738,45 @@ NAN_METHOD(GetServiceNamesAndTypesByNode) {
17381738 rcl_get_service_names_and_types_by_node (
17391739 node, &allocator, node_name.c_str (), node_namespace.c_str (),
17401740 &service_names_and_types),
1741- " Failed to get_publisher_names_and_types ." );
1741+ " Failed to get_service_names_and_types ." );
17421742
17431743 v8::Local<v8::Array> result_list =
17441744 Nan::New<v8::Array>(service_names_and_types.names .size );
17451745 ExtractNamesAndTypes (service_names_and_types, &result_list);
17461746
1747+ THROW_ERROR_IF_NOT_EQUAL (
1748+ RCL_RET_OK, rcl_names_and_types_fini (&service_names_and_types),
1749+ " Failed to destroy rcl_get_zero_initialized_names_and_types" );
1750+
1751+ info.GetReturnValue ().Set (result_list);
1752+ }
1753+
1754+ NAN_METHOD (GetClientNamesAndTypesByNode) {
1755+ v8::Local<v8::Context> currentContent = Nan::GetCurrentContext ();
1756+ RclHandle* node_handle = RclHandle::Unwrap<RclHandle>(
1757+ Nan::To<v8::Object>(info[0 ]).ToLocalChecked ());
1758+ rcl_node_t * node = reinterpret_cast <rcl_node_t *>(node_handle->ptr ());
1759+ std::string node_name =
1760+ *Nan::Utf8String (info[1 ]->ToString (currentContent).ToLocalChecked ());
1761+ std::string node_namespace =
1762+ *Nan::Utf8String (info[2 ]->ToString (currentContent).ToLocalChecked ());
1763+
1764+ rcl_names_and_types_t client_names_and_types =
1765+ rcl_get_zero_initialized_names_and_types ();
1766+ rcl_allocator_t allocator = rcl_get_default_allocator ();
17471767 THROW_ERROR_IF_NOT_EQUAL (RCL_RET_OK,
1748- rcl_names_and_types_fini (&service_names_and_types),
1749- " Failed to destroy topic_names_and_types" );
1768+ rcl_get_client_names_and_types_by_node (
1769+ node, &allocator, node_name.c_str (),
1770+ node_namespace.c_str (), &client_names_and_types),
1771+ " Failed to get_client_names_and_types." );
1772+
1773+ v8::Local<v8::Array> result_list =
1774+ Nan::New<v8::Array>(client_names_and_types.names .size );
1775+ ExtractNamesAndTypes (client_names_and_types, &result_list);
1776+
1777+ THROW_ERROR_IF_NOT_EQUAL (
1778+ RCL_RET_OK, rcl_names_and_types_fini (&client_names_and_types),
1779+ " Failed to destroy rcl_get_zero_initialized_names_and_types" );
17501780
17511781 info.GetReturnValue ().Set (result_list);
17521782}
@@ -2033,6 +2063,7 @@ std::vector<BindingMethod> binding_methods = {
20332063 {" getPublisherNamesAndTypesByNode" , GetPublisherNamesAndTypesByNode},
20342064 {" getSubscriptionNamesAndTypesByNode" , GetSubscriptionNamesAndTypesByNode},
20352065 {" getServiceNamesAndTypesByNode" , GetServiceNamesAndTypesByNode},
2066+ {" getClientNamesAndTypesByNode" , GetClientNamesAndTypesByNode},
20362067 {" getTopicNamesAndTypes" , GetTopicNamesAndTypes},
20372068 {" getServiceNamesAndTypes" , GetServiceNamesAndTypes},
20382069 {" getNodeNames" , GetNodeNames},
0 commit comments