ZIO
Python and C++ interface to ZeroMQ and Zyre
message.hpp
Go to the documentation of this file.
1 
7 #ifndef ZIO_MESSAGE_HPP_SEEN
8 #define ZIO_MESSAGE_HPP_SEEN
9 
10 #include "zio/interned.hpp"
11 
12 #include <vector>
13 #include <string>
14 
15 namespace zio {
16 
17  namespace level {
18  enum MessageLevel {
21  };
22 
23  const char* name(MessageLevel lvl);
24  }
25 
26  struct PrefixHeader {
28  std::string form{" "}; // we keep this exactly length 4
29  std::string label{""};
30 
31  std::string dumps() const;
32  // Return false if s can not be parsed as a prefix header
33  bool loads(const std::string& s);
34  };
35 
36  typedef uint64_t origin_t;
37  typedef uint64_t granule_t;
38  typedef uint64_t seqno_t;
39 
40  struct CoordHeader {
41  origin_t origin{0};
42  granule_t granule{0};
43  seqno_t seqno{0};
44  };
45  struct Header {
48  };
49 
59  class Message {
60  public:
61  typedef Header header_t;
62  typedef uint32_t routing_id_t;
63 
64  Message();
65  Message(const std::string& form, level::MessageLevel lvl = level::undefined);
66  Message(const header_t h);
67  Message(const header_t h, multipart_t&& pl);
68 
69  level::MessageLevel level() const;
70  void set_level(level::MessageLevel level);
71 
72  std::string form() const;
73  void set_form(const std::string& form);
74 
75  std::string label() const;
76  void set_label(const std::string& label);
77 
79  zio::json label_object() const;
80  void set_label_object(const zio::json& lobj);
81 
82  const PrefixHeader& prefix() const { return m_header.prefix; }
83  const CoordHeader& coord() const { return m_header.coord; }
84  origin_t origin() const { return m_header.coord.origin; }
85  granule_t granule() const { return m_header.coord.granule; }
86  seqno_t seqno() const { return m_header.coord.seqno; }
87 
90  void set_coord(origin_t origin=0, granule_t gran=0);
91 
93  void set_seqno(int seqno) { m_header.coord.seqno = seqno; }
94 
97  message_t encode() const;
98 
101  void decode(const message_t& dat);
102 
104  void fromparts(const multipart_t& allparts);
105 
107  multipart_t toparts() const;
108 
110  const multipart_t& payload() const { return m_payload; }
111  void clear_payload() { m_payload.clear(); }
112  void add(message_t&& spmsg) { m_payload.add(std::move(spmsg)); }
113 
115  routing_id_t routing_id() const { return m_rid; }
116 
118  void set_routing_id(routing_id_t rid) { m_rid = rid; }
119 
121 
122  private:
123  header_t m_header;
124  multipart_t m_payload;
125  routing_id_t m_rid;
126 
127  };
128 
129 
130 }
131 
132 #endif
uint64_t seqno_t
Definition: message.hpp:38
void set_seqno(int seqno)
Explicit set.
Definition: message.hpp:93
routing_id_t routing_id() const
Return routing ID if we have one.
Definition: message.hpp:115
const char * form
Definition: tens.hpp:15
CoordHeader coord
Definition: message.hpp:47
seqno_t seqno() const
Definition: message.hpp:86
void clear_payload()
Definition: message.hpp:111
const PrefixHeader & prefix() const
Definition: message.hpp:82
granule_t granule() const
Definition: message.hpp:85
Header header_t
Definition: message.hpp:61
void add(message_t &&spmsg)
Definition: message.hpp:112
origin_t origin() const
Definition: message.hpp:84
const multipart_t & payload() const
Access payload(s)
Definition: message.hpp:110
PrefixHeader prefix
Definition: message.hpp:46
uint64_t granule_t
Definition: message.hpp:37
const CoordHeader & coord() const
Definition: message.hpp:83
uint32_t routing_id_t
Definition: message.hpp:62
uint64_t origin_t
Definition: message.hpp:36
const char * name(MessageLevel lvl)
Definition: message.cpp:7
a ZIO message
Definition: message.hpp:59
implementation of ZIO data flow protocol endpoints
Definition: actor.hpp:14
void set_routing_id(routing_id_t rid)
Set routing ID.
Definition: message.hpp:118
nlohmann::json json
Definition: interned.hpp:9