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>
38template <
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();
105 return m_rep_promise;
118 m_rep_promise->set_value(reply);
119 }
catch(boost::wrapexcept<boost::promise_already_satisfied>& e) {
135 static_assert(std::is_base_of_v<elt::mal::MalException, T>,
136 "T must derive from MalException");
140 m_rep_promise->set_exception(boost::copy_exception(e));
141 }
catch(boost::wrapexcept<boost::promise_already_satisfied>& e1) {
147 REQ_TYPE m_req_payload;
152 std::shared_ptr<elt::mal::promise<REP_TYPE>>
162template <
class REP_TYPE>
169 Request() : m_rep_promise(
std::make_shared<elt::mal::promise<REP_TYPE>>()) {
198 return m_rep_promise->get_future();
213 return m_rep_promise;
226 m_rep_promise->set_value(reply);
227 }
catch(boost::wrapexcept<boost::promise_already_satisfied>& e) {
242 static_assert(std::is_base_of_v<elt::mal::MalException, T>,
243 "T must derive from MalException");
247 m_rep_promise->set_exception(boost::copy_exception(e));
248 }
catch(boost::wrapexcept<boost::promise_already_satisfied>& e1) {
258 std::shared_ptr<elt::mal::promise<REP_TYPE>>
269template <
typename REP_TYPE,
typename REQ_TYPE =
void>
281 m_server_ami = elt::mal::rr::ServerContextProvider::getInstance<
282 elt::mal::rr::ServerContext<REP_TYPE>>()
299 operator=(
RequestAmi&&) noexcept(
std::is_nothrow_move_assignable_v<REQ_TYPE>) = default;
304 return m_req_payload;
316 return m_server_ami->complete(reply);
328 return m_server_ami->completed(reply);
342 REQ_TYPE m_req_payload;
343 std::shared_ptr<::elt::mal::rr::Ami<REP_TYPE>>
353template <
class REP_TYPE>
362 m_server_ami = elt::mal::rr::ServerContextProvider::getInstance<
363 elt::mal::rr::ServerContext<REP_TYPE>>()
392 return m_server_ami->complete(reply);
404 return m_server_ami->completed(reply);
418 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
std::shared_ptr<::elt::mal::rr::Ami< REP_TYPE > > GetAmiServer()
Definition request.hpp:412
RequestAmi(const RequestAmi &)=default
RequestAmi()
Definition request.hpp:360
bool SetFinalReplyValue(const REP_TYPE &reply) const
Definition request.hpp:402
RequestAmi(RequestAmi &&) noexcept=default
Definition request.hpp:270
bool SetPartialReplyValue(const REP_TYPE &reply) const
Definition request.hpp:314
RequestAmi(const REQ_TYPE &req_payload)
Definition request.hpp:279
RequestAmi(RequestAmi &&) noexcept(std::is_nothrow_move_constructible< REQ_TYPE >())=default
bool SetFinalReplyValue(const REP_TYPE &reply) const
Definition request.hpp:326
const REQ_TYPE & GetRequestPayload() const
Definition request.hpp:302
RequestAmi(const RequestAmi &)=default
std::shared_ptr<::elt::mal::rr::Ami< REP_TYPE > > GetAmiServer()
Definition request.hpp:336
void SetException(const T &e) const
Definition request.hpp:240
Request(const Request &)=default
std::shared_ptr< elt::mal::promise< REP_TYPE > > GetReplyPromise() const
Definition request.hpp:210
Request(Request &&) noexcept=default
Request()
Definition request.hpp:169
void SetReplyValue(const REP_TYPE &reply) const
Definition request.hpp:222
Definition request.hpp:39
void SetException(const T &e) const
Definition request.hpp:133
Request(const Request &)=default
elt::mal::future< REP_TYPE > GetReplyFuture() const
Definition request.hpp:87
Request(Request &&) noexcept(std::is_nothrow_move_constructible< REQ_TYPE >())=default
void SetReplyValue(const REP_TYPE &reply) const
Definition request.hpp:114
std::shared_ptr< elt::mal::promise< REP_TYPE > > GetReplyPromise() const
Definition request.hpp:102
Request(const REQ_TYPE &req_payload)
Definition request.hpp:48
const REQ_TYPE & GetRequestPayload() const
Definition request.hpp:76
#define RAD_TRACE(logger)
Definition logger.hpp:21
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:23
log4cplus::Logger & GetLogger()
Definition logger.cpp:72