1 #ifndef CONTROLS_VEHICLE_REQUEST_H
2 #define CONTROLS_VEHICLE_REQUEST_H
7 #include <boost/uuid/nil_generator.hpp>
8 #include <boost/uuid/uuid.hpp>
28 template <RequestHandleState S>
31 template <RequestState S>
36 boost::uuids::uuid
id_;
37 std::shared_ptr<AtomicRequestState>
state_;
44 [[nodiscard]] boost::uuids::uuid
get_id()
const {
54 RequestHandle(boost::uuids::uuid id, std::shared_ptr<AtomicRequestState> state)
75 std::future<void> future_;
77 RequestHandle(boost::uuids::uuid id, std::shared_ptr<AtomicRequestState> state, std::future<void> future)
82 std::optional<RequestHandle<RequestHandleState::RESOLVED>>
wait_for(std::chrono::duration<double> timeout
83 = std::chrono::seconds(1)) {
84 if (!future_.valid()) {
88 if (future_.wait_for(timeout) == std::future_status::timeout) {
94 }
catch (
const std::future_error& e) {
96 "[REQUEST HANDLE] Future error during activation check: %s", e.what());
108 std::shared_ptr<AtomicRequestState>
state_;
115 [[nodiscard]] boost::uuids::uuid
get_id()
const {
132 if (
this == &other) {
138 state_ = std::move(other.state_);
157 Request(boost::uuids::uuid
id,
RequestType type, std::unique_ptr<TrajectoryBase> trajectory =
nullptr)
159 trajectory_(std::move(trajectory)) {
163 return {id_, state_, promise_.get_future()};
166 std::pair<Request<RequestState::ACTIVE>, std::unique_ptr<TrajectoryBase>>
accept() {
168 promise_.set_value();
170 return {std::move(active), std::move(trajectory_)};
175 promise_.set_value();
179 std::unique_ptr<TrajectoryBase> trajectory_;
180 std::promise<void> promise_;
static rclcpp::Logger get_logger()
Returns the ROS logger associated with the shared node.
Definition: NodeUtils.h:58
Definition: Request.h:104
boost::uuids::uuid id_
Definition: Request.h:106
std::shared_ptr< AtomicRequestState > state_
Definition: Request.h:108
RequestType type_
Definition: Request.h:107
RequestType get_type() const
Definition: Request.h:118
RequestBase(boost::uuids::uuid id, RequestType type, std::shared_ptr< AtomicRequestState > state)
Definition: Request.h:110
boost::uuids::uuid get_id() const
Definition: Request.h:115
boost::uuids::uuid get_id() const
Definition: Request.h:44
boost::uuids::uuid id_
Definition: Request.h:36
std::shared_ptr< AtomicRequestState > state_
Definition: Request.h:37
RequestHandleBase(boost::uuids::uuid id, std::shared_ptr< AtomicRequestState > state)
Definition: Request.h:39
std::optional< RequestHandle< RequestHandleState::RESOLVED > > wait_for(std::chrono::duration< double > timeout=std::chrono::seconds(1))
Definition: Request.h:82
bool is_preempted() const
Definition: Request.h:65
bool is_active() const
Definition: Request.h:59
bool is_rejected() const
Definition: Request.h:62
Definition: Request.h:124
static Request make_initial()
Definition: Request.h:126
Request(Request< RequestState::ACTIVE > &&) noexcept=default
Request & operator=(Request< RequestState::ACTIVE > &&other) noexcept
Definition: Request.h:131
void reject()
Definition: Request.h:173
std::pair< Request< RequestState::ACTIVE >, std::unique_ptr< TrajectoryBase > > accept()
Definition: Request.h:166
Request(boost::uuids::uuid id, RequestType type, std::unique_ptr< TrajectoryBase > trajectory=nullptr)
Definition: Request.h:157
RequestHandle< RequestHandleState::PENDING > get_handle()
Definition: Request.h:162
std::atomic< RequestState > AtomicRequestState
Definition: Request.h:26
RequestType
Definition: Request.h:25
RequestState
Definition: Request.h:24
RequestHandleState
Definition: Request.h:23