8 #ifndef DRIPLINE_MESSAGE_HH_ 9 #define DRIPLINE_MESSAGE_HH_ 11 #include "member_variables.hh" 28 class version_semantic;
65 virtual bool is_request()
const = 0;
66 virtual bool is_reply()
const = 0;
67 virtual bool is_alert()
const = 0;
71 static std::tuple< std::string, unsigned, unsigned > parse_message_id(
const std::string& a_message_id );
80 void encode_message_body( std::vector< std::string >& a_body_vec,
unsigned a_max_size,
const scarab::param_node& a_options = scarab::param_node() )
const;
83 std::string encode_full_message(
unsigned a_max_size,
const scarab::param_node& a_options = scarab::param_node() )
const;
86 virtual void derived_modify_amqp_message(
amqp_message_ptr a_amqp_msg, AmqpClient::Table& a_properties )
const = 0;
88 virtual void derived_modify_message_param( scarab::param_node& a_message_node )
const = 0;
90 std::string interpret_encoding()
const;
94 mv_accessible(
bool, is_valid );
97 mv_referrable( std::string, correlation_id );
98 mv_referrable( std::string, message_id );
99 mv_referrable( std::string, reply_to );
101 mv_referrable( std::string, timestamp );
103 mv_referrable( std::string, sender_exe );
104 mv_referrable( std::string, sender_hostname );
105 mv_referrable( std::string, sender_username );
106 mv_referrable( std::string, sender_service_name );
115 sender_package_version(
const std::string& a_version,
const std::string& a_commit,
const std::string& a_package );
119 mv_referrable( sender_version_map_t, sender_versions );
126 const specifier& parsed_specifier()
const;
128 virtual msg_t message_type()
const = 0;
131 scarab::param_node get_sender_info()
const;
133 void set_sender_info(
const scarab::param_node& a_sender_info );
136 scarab::param_node get_message_param(
bool a_include_payload =
true )
const;
139 scarab::param& payload();
140 const scarab::param& payload()
const;
142 void set_payload( scarab::param_ptr_t a_payload );
143 const scarab::param_ptr_t& get_payload_ptr()
const;
149 static const char s_message_id_separator =
'/';
181 static request_ptr_t create( scarab::param_ptr_t a_payload,
op_t a_msg_op,
const std::string& a_routing_key,
const std::string& a_specifier =
"",
const std::string& a_reply_to =
"",
message::encoding a_encoding = encoding::json );
183 bool is_request()
const;
184 bool is_reply()
const;
185 bool is_alert()
const;
188 reply_ptr_t reply(
const return_code& a_return_code,
const std::string& a_ret_msg, scarab::param_ptr_t a_payload = scarab::param_ptr_t(
new scarab::param() ) )
const;
190 reply_ptr_t reply(
const unsigned a_return_code,
const std::string& a_ret_msg, scarab::param_ptr_t a_payload = scarab::param_ptr_t(
new scarab::param() ) )
const;
193 void derived_modify_amqp_message(
amqp_message_ptr a_amqp_msg, AmqpClient::Table& a_properties )
const;
194 virtual void derived_modify_message_param( scarab::param_node& a_message_node )
const;
197 virtual msg_t message_type()
const;
198 mv_accessible_static_noset(
msg_t, message_type );
200 mv_referrable(
uuid_t, lockout_key );
201 mv_accessible(
bool, lockout_key_valid );
202 mv_accessible(
op_t, message_operation );
236 static reply_ptr_t create(
const return_code& a_return_code,
const std::string& a_ret_msg, scarab::param_ptr_t a_payload,
const std::string& a_routing_key,
const std::string& a_specifier =
"",
message::encoding a_encoding = encoding::json );
238 static reply_ptr_t create(
unsigned a_return_code_value,
const std::string& a_ret_msg, scarab::param_ptr_t a_payload,
const std::string& a_routing_key,
const std::string& a_specifier =
"",
message::encoding a_encoding = encoding::json );
242 static reply_ptr_t create(
unsigned a_return_code,
const std::string& a_ret_msg, scarab::param_ptr_t a_payload,
const msg_request& a_request );
244 bool is_request()
const;
245 bool is_reply()
const;
246 bool is_alert()
const;
249 void derived_modify_amqp_message(
amqp_message_ptr a_amqp_msg, AmqpClient::Table& a_properties )
const;
250 virtual void derived_modify_message_param( scarab::param_node& a_message_node )
const;
253 virtual msg_t message_type()
const;
254 mv_accessible_static_noset(
msg_t, message_type );
257 mv_referrable( std::string, return_message );
291 static alert_ptr_t create( scarab::param_ptr_t a_payload,
const std::string& a_routing_key,
const std::string& a_specifier =
"",
message::encoding a_encoding = encoding::json );
293 bool is_request()
const;
294 bool is_reply()
const;
295 bool is_alert()
const;
298 void derived_modify_amqp_message(
amqp_message_ptr a_amqp_msg, AmqpClient::Table& a_properties )
const;
299 virtual void derived_modify_message_param( scarab::param_node& a_message_node )
const;
302 virtual msg_t message_type()
const;
303 mv_accessible_static_noset(
msg_t, message_type );
321 inline const specifier& message::parsed_specifier()
const 326 inline scarab::param& message::payload()
331 inline const scarab::param& message::payload()
const 336 inline void message::set_payload( scarab::param_ptr_t a_payload )
338 f_payload = std::move(a_payload);
341 inline const scarab::param_ptr_t& message::get_payload_ptr()
const 351 inline bool msg_request::is_request()
const 355 inline bool msg_request::is_reply()
const 359 inline bool msg_request::is_alert()
const 364 inline void msg_request::derived_modify_amqp_message(
amqp_message_ptr , AmqpClient::Table& a_properties )
const 366 a_properties.insert( AmqpClient::TableEntry(
"message_operation", AmqpClient::TableValue(
to_uint(f_message_operation)) ) );
367 a_properties.insert( AmqpClient::TableEntry(
"lockout_key", AmqpClient::TableValue(
string_from_uuid(lockout_key())) ) );
371 inline void msg_request::derived_modify_message_param( scarab::param_node& a_message_node )
const 373 a_message_node.add(
"message_operation",
to_uint(f_message_operation) );
378 inline reply_ptr_t msg_request::reply(
const return_code& a_return_code,
const std::string& a_ret_msg, scarab::param_ptr_t a_payload )
const 380 return msg_reply::create( a_return_code, a_ret_msg, std::move(a_payload), *
this );
383 inline reply_ptr_t msg_request::reply(
unsigned a_return_code,
const std::string& a_ret_msg, scarab::param_ptr_t a_payload )
const 385 return msg_reply::create( a_return_code, a_ret_msg, std::move(a_payload), *
this );
395 return msg_reply::create( a_return_code.
rc_value(), a_ret_msg, std::move(a_payload), a_request );
398 inline reply_ptr_t msg_reply::create(
unsigned a_return_code,
const std::string& a_ret_msg, scarab::param_ptr_t a_payload,
const msg_request& a_request )
400 reply_ptr_t t_reply = msg_reply::create( a_return_code, a_ret_msg, std::move(a_payload), a_request.reply_to(),
"", a_request.get_encoding() );
401 t_reply->correlation_id() = a_request.correlation_id();
405 inline bool msg_reply::is_request()
const 409 inline bool msg_reply::is_reply()
const 413 inline bool msg_reply::is_alert()
const 418 inline void msg_reply::derived_modify_amqp_message(
amqp_message_ptr, AmqpClient::Table& a_properties )
const 420 a_properties.insert( AmqpClient::TableEntry(
"return_code", AmqpClient::TableValue(f_return_code) ) );
421 a_properties.insert( AmqpClient::TableEntry(
"return_message", AmqpClient::TableValue(f_return_message) ) );
425 inline void msg_reply::derived_modify_message_param( scarab::param_node& a_message_node )
const 427 a_message_node.add(
"return_code", f_return_code );
428 a_message_node.add(
"return_message", f_return_message );
437 inline bool msg_alert::is_request()
const 441 inline bool msg_alert::is_reply()
const 445 inline bool msg_alert::is_alert()
const 450 inline void msg_alert::derived_modify_amqp_message(
amqp_message_ptr, AmqpClient::Table& )
const 455 inline void msg_alert::derived_modify_message_param( scarab::param_node& )
const Base class for return codes.
std::map< std::string, sender_package_version > sender_version_map_t
AmqpClient::BasicMessage::ptr_t amqp_message_ptr
Parses routing keys and stores the tokenized information.
std::shared_ptr< msg_request > request_ptr_t
std::shared_ptr< msg_alert > alert_ptr_t
virtual unsigned rc_value() const =0
std::ostream & operator<<(std::ostream &a_os, op_t an_op)
Pass the integer-equivalent of a message-operation enum to an ostream.
Contains all of the information common to all types of Dripline messages.
std::string f_return_buffer
std::vector< amqp_message_ptr > amqp_split_message_ptrs
std::string string_from_uuid(const uuid_t &a_id)
Generates a string representation of the provided UUID.
boost::uuids::uuid uuid_t
Universally-unique-identifier type containing 16 hexadecimal characters.
scarab::param_ptr_t f_payload
std::shared_ptr< msg_reply > reply_ptr_t
uint32_t to_uint(op_t an_op)
Convert a message-operation enum to an integer.
Parses specifiers and stores the tokenized information.
bool operator==(const message &a_lhs, const message &a_rhs)
std::shared_ptr< message > message_ptr_t
#define DL_MAX_PAYLOAD_SIZE