ModuleController & ModuleController::get_client_handle(const pegasus_identity & id, client_handle **handle) { return get_client_handle(PEGASUS_QUEUENAME_CONTROLSERVICE, id, handle); }
SharedFuture async_send_request(SharedRequest request, CallbackT && cb) { int64_t sequence_number; if (RMW_RET_OK != rmw_send_request(get_client_handle(), request.get(), &sequence_number)) { // *INDENT-OFF* (prevent uncrustify from making unecessary indents here) throw std::runtime_error( std::string("failed to send request: ") + rmw_get_error_string_safe()); // *INDENT-ON* } SharedPromise call_promise = std::make_shared<Promise>(); SharedFuture f(call_promise->get_future()); pending_requests_[sequence_number] = std::make_tuple(call_promise, std::forward<CallbackType>(cb), f); return f; }
bool collect_entities(const WeakNodeVector & weak_nodes) { bool has_invalid_weak_nodes = false; for (auto & weak_node : weak_nodes) { auto node = weak_node.lock(); if (!node) { has_invalid_weak_nodes = true; continue; } for (auto & weak_group : node->get_callback_groups()) { auto group = weak_group.lock(); if (!group || !group->can_be_taken_from().load()) { continue; } for (auto & weak_subscription : group->get_subscription_ptrs()) { auto subscription = weak_subscription.lock(); if (subscription) { subscription_handles_.push_back(subscription->get_subscription_handle()); if (subscription->get_intra_process_subscription_handle()) { subscription_handles_.push_back( subscription->get_intra_process_subscription_handle()); } } } for (auto & weak_service : group->get_service_ptrs()) { auto service = weak_service.lock(); if (service) { service_handles_.push_back(service->get_service_handle()); } } for (auto & weak_client : group->get_client_ptrs()) { auto client = weak_client.lock(); if (client) { client_handles_.push_back(client->get_client_handle()); } } for (auto & weak_timer : group->get_timer_ptrs()) { auto timer = weak_timer.lock(); if (timer) { timer_handles_.push_back(timer->get_timer_handle()); } } } } return has_invalid_weak_nodes; }