@@ -126,28 +126,6 @@ Napi::Value ActionSendGoalRequest(const Napi::CallbackInfo& info) {
126126 return Napi::Number::New (env, static_cast <int32_t >(sequence_number));
127127}
128128
129- Napi::Value ActionTakeCancelRequest (const Napi::CallbackInfo& info) {
130- Napi::Env env = info.Env ();
131-
132- RclHandle* action_server_handle =
133- RclHandle::Unwrap (info[0 ].As <Napi::Object>());
134- rcl_action_server_t * action_server =
135- reinterpret_cast <rcl_action_server_t *>(action_server_handle->ptr ());
136- rmw_request_id_t * header =
137- reinterpret_cast <rmw_request_id_t *>(malloc (sizeof (rmw_request_id_t )));
138-
139- void * taken_request = info[1 ].As <Napi::Buffer<char >>().Data ();
140- rcl_ret_t ret =
141- rcl_action_take_cancel_request (action_server, header, taken_request);
142- if (ret != RCL_RET_ACTION_SERVER_TAKE_FAILED) {
143- auto js_obj = RclHandle::NewInstance (env, header, nullptr ,
144- [](void * ptr) { free (ptr); });
145- return js_obj;
146- }
147-
148- return env.Undefined ();
149- }
150-
151129Napi::Value ActionSendResultRequest (const Napi::CallbackInfo& info) {
152130 Napi::Env env = info.Env ();
153131
@@ -211,20 +189,73 @@ Napi::Value ActionTakeStatus(const Napi::CallbackInfo& info) {
211189 return env.Undefined ();
212190}
213191
192+ Napi::Value GetNumEntities (const Napi::CallbackInfo& info) {
193+ Napi::Env env = info.Env ();
194+ RclHandle* action_client_handle =
195+ RclHandle::Unwrap (info[0 ].As <Napi::Object>());
196+ rcl_action_client_t * action_client =
197+ reinterpret_cast <rcl_action_client_t *>(action_client_handle->ptr ());
198+
199+ size_t num_subscriptions = 0u ;
200+ size_t num_guard_conditions = 0u ;
201+ size_t num_timers = 0u ;
202+ size_t num_clients = 0u ;
203+ size_t num_services = 0u ;
204+
205+ rcl_ret_t ret;
206+ ret = rcl_action_client_wait_set_get_num_entities (
207+ action_client, &num_subscriptions, &num_guard_conditions, &num_timers,
208+ &num_clients, &num_services);
209+ if (RCL_RET_OK != ret) {
210+ rcl_reset_error ();
211+ std::string error_text{
212+ " Failed to get number of entities for 'rcl_action_client_t'" };
213+ Napi::Error::New (env, error_text).ThrowAsJavaScriptException ();
214+ return env.Undefined ();
215+ }
216+ Napi::Object entities = Napi::Object::New (env);
217+ entities.Set (" subscriptionsNumber" ,
218+ Napi::Number::New (env, num_subscriptions));
219+ entities.Set (" guardConditionsNumber" ,
220+ Napi::Number::New (env, num_guard_conditions));
221+ entities.Set (" timersNumber" , Napi::Number::New (env, num_timers));
222+ entities.Set (" clientsNumber" , Napi::Number::New (env, num_clients));
223+ entities.Set (" servicesNumber" , Napi::Number::New (env, num_services));
224+ return entities;
225+ }
226+
227+ Napi::Value ActionSendCancelRequest (const Napi::CallbackInfo& info) {
228+ Napi::Env env = info.Env ();
229+
230+ RclHandle* action_client_handle =
231+ RclHandle::Unwrap (info[0 ].As <Napi::Object>());
232+ rcl_action_client_t * action_client =
233+ reinterpret_cast <rcl_action_client_t *>(action_client_handle->ptr ());
234+ void * buffer = info[1 ].As <Napi::Buffer<char >>().Data ();
235+
236+ int64_t sequence_number;
237+ THROW_ERROR_IF_NOT_EQUAL (
238+ rcl_action_send_cancel_request (action_client, buffer, &sequence_number),
239+ RCL_RET_OK, rcl_get_error_string ().str );
240+
241+ return Napi::Number::New (env, static_cast <int32_t >(sequence_number));
242+ }
243+
214244Napi::Object InitActionClientBindings (Napi::Env env, Napi::Object exports) {
215245 exports.Set (" actionCreateClient" ,
216246 Napi::Function::New (env, ActionCreateClient));
217247 exports.Set (" actionServerIsAvailable" ,
218248 Napi::Function::New (env, ActionServerIsAvailable));
219249 exports.Set (" actionSendGoalRequest" ,
220250 Napi::Function::New (env, ActionSendGoalRequest));
221- exports.Set (" actionTakeCancelRequest" ,
222- Napi::Function::New (env, ActionTakeCancelRequest));
223251 exports.Set (" actionSendResultRequest" ,
224252 Napi::Function::New (env, ActionSendResultRequest));
225253 exports.Set (" actionTakeFeedback" ,
226254 Napi::Function::New (env, ActionTakeFeedback));
227255 exports.Set (" actionTakeStatus" , Napi::Function::New (env, ActionTakeStatus));
256+ exports.Set (" getNumEntities" , Napi::Function::New (env, GetNumEntities));
257+ exports.Set (" actionSendCancelRequest" ,
258+ Napi::Function::New (env, ActionSendCancelRequest));
228259 return exports;
229260}
230261
0 commit comments