14 #ifndef RAD_MAL_REQUEST_HPP
15 #define RAD_MAL_REQUEST_HPP
21 #include <mal/rr/ServerContextProvider.hpp>
22 #include <mal/utility/future.hpp>
23 #include <mal/MalException.hpp>
25 #include <type_traits>
38 template <
typename REP_TYPE,
typename REQ_TYPE =
void>
48 explicit Request(
const REQ_TYPE& req_payload)
49 : m_req_payload(req_payload),
50 m_rep_promise(
std::make_shared<elt::mal::promise<REP_TYPE>>()) {
67 Request& operator=(
Request&&) noexcept(
std::is_nothrow_move_assignable_v<REQ_TYPE>) = default;
90 return m_rep_promise->get_future();
103 m_rep_promise->set_value(reply);
104 }
catch(boost::wrapexcept<boost::promise_already_satisfied>& e) {
120 static_assert(std::is_base_of_v<elt::mal::MalException, T>,
121 "T must derive from MalException");
125 m_rep_promise->set_exception(boost::copy_exception(e));
126 }
catch(boost::wrapexcept<boost::promise_already_satisfied>& e1) {
132 REQ_TYPE m_req_payload;
137 std::shared_ptr<elt::mal::promise<REP_TYPE>>
147 template <
class REP_TYPE>
154 Request() : m_rep_promise(
std::make_shared<elt::mal::promise<REP_TYPE>>()) {
183 return m_rep_promise->get_future();
196 m_rep_promise->set_value(reply);
197 }
catch(boost::wrapexcept<boost::promise_already_satisfied>& e) {
212 static_assert(std::is_base_of_v<elt::mal::MalException, T>,
213 "T must derive from MalException");
217 m_rep_promise->set_exception(boost::copy_exception(e));
218 }
catch(boost::wrapexcept<boost::promise_already_satisfied>& e1) {
228 std::shared_ptr<elt::mal::promise<REP_TYPE>>
239 template <
typename REP_TYPE,
typename REQ_TYPE =
void>
251 m_server_ami = elt::mal::rr::ServerContextProvider::getInstance<
252 elt::mal::rr::ServerContext<REP_TYPE>>()
269 operator=(
RequestAmi&&) noexcept(
std::is_nothrow_move_assignable_v<REQ_TYPE>) = default;
274 return m_req_payload;
286 return m_server_ami->complete(reply);
298 return m_server_ami->completed(reply);
312 REQ_TYPE m_req_payload;
313 std::shared_ptr<::elt::mal::rr::Ami<REP_TYPE>>
323 template <
class REP_TYPE>
332 m_server_ami = elt::mal::rr::ServerContextProvider::getInstance<
333 elt::mal::rr::ServerContext<REP_TYPE>>()
362 return m_server_ami->complete(reply);
374 return m_server_ami->completed(reply);
388 std::shared_ptr<::elt::mal::rr::ServerAmi<REP_TYPE>>
#define RAD_ASSERTPTR(a)
Definition: assert.hpp:19
Base class for the exceptions thrown by RAD and its users.
Definition: exceptions.hpp:53
RequestAmi(const RequestAmi &)=default
RequestAmi()
Definition: request.hpp:330
bool SetFinalReplyValue(const REP_TYPE &reply) const
Definition: request.hpp:372
std::shared_ptr<::elt::mal::rr::Ami< REP_TYPE > > GetAmiServer()
Definition: request.hpp:382
RequestAmi(RequestAmi &&) noexcept=default
Definition: request.hpp:240
bool SetPartialReplyValue(const REP_TYPE &reply) const
Definition: request.hpp:284
RequestAmi(const REQ_TYPE &req_payload)
Definition: request.hpp:249
RequestAmi(RequestAmi &&) noexcept(std::is_nothrow_move_constructible< REQ_TYPE >())=default
bool SetFinalReplyValue(const REP_TYPE &reply) const
Definition: request.hpp:296
RequestAmi(const RequestAmi &)=default
const REQ_TYPE & GetRequestPayload() const
Definition: request.hpp:272
std::shared_ptr<::elt::mal::rr::Ami< REP_TYPE > > GetAmiServer()
Definition: request.hpp:306
void SetException(const T &e) const
Definition: request.hpp:210
Request(const Request &)=default
Request(Request &&) noexcept=default
Request()
Definition: request.hpp:154
void SetReplyValue(const REP_TYPE &reply) const
Definition: request.hpp:192
Definition: request.hpp:39
elt::mal::future< REP_TYPE > GetReplyFuture() const
Definition: request.hpp:87
void SetException(const T &e) const
Definition: request.hpp:118
Request(const Request &)=default
Request(Request &&) noexcept(std::is_nothrow_move_constructible< REQ_TYPE >())=default
void SetReplyValue(const REP_TYPE &reply) const
Definition: request.hpp:99
const REQ_TYPE & GetRequestPayload() const
Definition: request.hpp:76
Request(const REQ_TYPE &req_payload)
Definition: request.hpp:48
#define RAD_TRACE(logger)
Definition: logger.hpp:24
Exception classes header file.
#define RAD_LOG_THROW(exceptionType_t, logger, msg)
Throw exception with information about the throw location.
Definition: exceptions.hpp:356
Definition: actionsApp.cpp:20
log4cplus::Logger & GetLogger()
Definition: logger.cpp:70
Definition: errors.hpp:58