Merge pull request #199 from ros2/request_header
Don't type-erase request header
This commit is contained in:
commit
249b7d80d8
3 changed files with 17 additions and 17 deletions
|
@ -58,9 +58,9 @@ public:
|
||||||
get_client_handle() const;
|
get_client_handle() const;
|
||||||
|
|
||||||
virtual std::shared_ptr<void> create_response() = 0;
|
virtual std::shared_ptr<void> create_response() = 0;
|
||||||
virtual std::shared_ptr<void> create_request_header() = 0;
|
virtual std::shared_ptr<rmw_request_id_t> create_request_header() = 0;
|
||||||
virtual void handle_response(
|
virtual void handle_response(
|
||||||
std::shared_ptr<void> request_header, std::shared_ptr<void> response) = 0;
|
std::shared_ptr<rmw_request_id_t> request_header, std::shared_ptr<void> response) = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RCLCPP_DISABLE_COPY(ClientBase);
|
RCLCPP_DISABLE_COPY(ClientBase);
|
||||||
|
@ -104,19 +104,19 @@ public:
|
||||||
return std::shared_ptr<void>(new typename ServiceT::Response());
|
return std::shared_ptr<void>(new typename ServiceT::Response());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<void> create_request_header()
|
std::shared_ptr<rmw_request_id_t> create_request_header()
|
||||||
{
|
{
|
||||||
// TODO(wjwwood): This should probably use rmw_request_id's allocator.
|
// TODO(wjwwood): This should probably use rmw_request_id's allocator.
|
||||||
// (since it is a C type)
|
// (since it is a C type)
|
||||||
return std::shared_ptr<void>(new rmw_request_id_t);
|
return std::shared_ptr<rmw_request_id_t>(new rmw_request_id_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_response(std::shared_ptr<void> request_header, std::shared_ptr<void> response)
|
void handle_response(std::shared_ptr<rmw_request_id_t> request_header,
|
||||||
|
std::shared_ptr<void> response)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(pending_requests_mutex_);
|
std::lock_guard<std::mutex> lock(pending_requests_mutex_);
|
||||||
auto typed_request_header = std::static_pointer_cast<rmw_request_id_t>(request_header);
|
|
||||||
auto typed_response = std::static_pointer_cast<typename ServiceT::Response>(response);
|
auto typed_response = std::static_pointer_cast<typename ServiceT::Response>(response);
|
||||||
int64_t sequence_number = typed_request_header->sequence_number;
|
int64_t sequence_number = request_header->sequence_number;
|
||||||
// TODO(esteve) this should throw instead since it is not expected to happen in the first place
|
// TODO(esteve) this should throw instead since it is not expected to happen in the first place
|
||||||
if (this->pending_requests_.count(sequence_number) == 0) {
|
if (this->pending_requests_.count(sequence_number) == 0) {
|
||||||
fprintf(stderr, "Received invalid sequence number. Ignoring...\n");
|
fprintf(stderr, "Received invalid sequence number. Ignoring...\n");
|
||||||
|
|
|
@ -55,9 +55,9 @@ public:
|
||||||
get_service_handle();
|
get_service_handle();
|
||||||
|
|
||||||
virtual std::shared_ptr<void> create_request() = 0;
|
virtual std::shared_ptr<void> create_request() = 0;
|
||||||
virtual std::shared_ptr<void> create_request_header() = 0;
|
virtual std::shared_ptr<rmw_request_id_t> create_request_header() = 0;
|
||||||
virtual void handle_request(
|
virtual void handle_request(
|
||||||
std::shared_ptr<void> request_header,
|
std::shared_ptr<rmw_request_id_t> request_header,
|
||||||
std::shared_ptr<void> request) = 0;
|
std::shared_ptr<void> request) = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -102,20 +102,20 @@ public:
|
||||||
return std::shared_ptr<void>(new typename ServiceT::Request());
|
return std::shared_ptr<void>(new typename ServiceT::Request());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<void> create_request_header()
|
std::shared_ptr<rmw_request_id_t> create_request_header()
|
||||||
{
|
{
|
||||||
// TODO(wjwwood): This should probably use rmw_request_id's allocator.
|
// TODO(wjwwood): This should probably use rmw_request_id's allocator.
|
||||||
// (since it is a C type)
|
// (since it is a C type)
|
||||||
return std::shared_ptr<void>(new rmw_request_id_t);
|
return std::shared_ptr<rmw_request_id_t>(new rmw_request_id_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_request(std::shared_ptr<void> request_header, std::shared_ptr<void> request)
|
void handle_request(std::shared_ptr<rmw_request_id_t> request_header,
|
||||||
|
std::shared_ptr<void> request)
|
||||||
{
|
{
|
||||||
auto typed_request = std::static_pointer_cast<typename ServiceT::Request>(request);
|
auto typed_request = std::static_pointer_cast<typename ServiceT::Request>(request);
|
||||||
auto typed_request_header = std::static_pointer_cast<rmw_request_id_t>(request_header);
|
|
||||||
auto response = std::shared_ptr<typename ServiceT::Response>(new typename ServiceT::Response);
|
auto response = std::shared_ptr<typename ServiceT::Response>(new typename ServiceT::Response);
|
||||||
any_callback_.dispatch(typed_request_header, typed_request, response);
|
any_callback_.dispatch(request_header, typed_request, response);
|
||||||
send_response(typed_request_header, response);
|
send_response(request_header, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_response(
|
void send_response(
|
||||||
|
|
|
@ -287,7 +287,7 @@ void
|
||||||
Executor::execute_service(
|
Executor::execute_service(
|
||||||
rclcpp::service::ServiceBase::SharedPtr service)
|
rclcpp::service::ServiceBase::SharedPtr service)
|
||||||
{
|
{
|
||||||
std::shared_ptr<void> request_header = service->create_request_header();
|
auto request_header = service->create_request_header();
|
||||||
std::shared_ptr<void> request = service->create_request();
|
std::shared_ptr<void> request = service->create_request();
|
||||||
bool taken = false;
|
bool taken = false;
|
||||||
rmw_ret_t status = rmw_take_request(
|
rmw_ret_t status = rmw_take_request(
|
||||||
|
@ -310,7 +310,7 @@ void
|
||||||
Executor::execute_client(
|
Executor::execute_client(
|
||||||
rclcpp::client::ClientBase::SharedPtr client)
|
rclcpp::client::ClientBase::SharedPtr client)
|
||||||
{
|
{
|
||||||
std::shared_ptr<void> request_header = client->create_request_header();
|
auto request_header = client->create_request_header();
|
||||||
std::shared_ptr<void> response = client->create_response();
|
std::shared_ptr<void> response = client->create_response();
|
||||||
bool taken = false;
|
bool taken = false;
|
||||||
rmw_ret_t status = rmw_take_response(
|
rmw_ret_t status = rmw_take_response(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue