async_mqtt 9.0.1
Loading...
Searching...
No Matches
v3_1_1_publish.hpp
1// Copyright Takatoshi Kondo 2022
2//
3// Distributed under the Boost Software License, Version 1.0.
4// (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt)
6
7#if !defined(ASYNC_MQTT_PACKET_V3_1_1_PUBLISH_HPP)
8#define ASYNC_MQTT_PACKET_V3_1_1_PUBLISH_HPP
9
10#include <async_mqtt/buffer_to_packet_variant.hpp>
11
12#include <async_mqtt/packet/control_packet_type.hpp>
13#include <async_mqtt/packet/packet_id_type.hpp>
14#include <async_mqtt/packet/pubopts.hpp>
15#include <async_mqtt/packet/detail/is_payload.hpp>
16
17#include <async_mqtt/util/buffer.hpp>
18#include <async_mqtt/util/static_vector.hpp>
19
20
21#if defined(ASYNC_MQTT_PRINT_PAYLOAD)
22#include <async_mqtt/util/json_like_out.hpp>
23#endif // defined(ASYNC_MQTT_PRINT_PAYLOAD)
24
35namespace async_mqtt::v3_1_1 {
36
37namespace as = boost::asio;
38
60template <std::size_t PacketIdBytes>
62public:
63
83 template <
84 typename StringViewLike,
85 typename Payload,
86 std::enable_if_t<
87 std::is_convertible_v<std::decay_t<StringViewLike>, std::string_view> &&
88 detail::is_payload<Payload>(),
89 std::nullptr_t
90 > = nullptr
91 >
94 StringViewLike&& topic_name,
95 Payload&& payloads,
96 pub::opts pubopts
97 );
98
113 template <
114 typename StringViewLike,
115 typename Payload,
116 std::enable_if_t<
117 std::is_convertible_v<std::decay_t<StringViewLike>, std::string_view> &&
118 detail::is_payload<Payload>(),
119 std::nullptr_t
120 > = nullptr
121 >
123 StringViewLike&& topic_name,
124 Payload&& payloads,
125 pub::opts pubopts
126 );
127
132 static constexpr control_packet_type type() {
134 }
135
141 std::vector<as::const_buffer> const_buffer_sequence() const;
142
147 std::size_t size() const;
148
153 std::size_t num_of_const_buffer_sequence() const;
154
160
165 constexpr pub::opts opts() const {
166 return pub::opts(fixed_header_);
167 }
168
173 std::string topic() const;
174
179 buffer const& topic_as_buffer() const;
180
185 std::string payload() const;
186
191 auto payload_range() const;
192
197 std::vector<buffer> const& payload_as_buffer() const;
198
203 constexpr void set_dup(bool dup) {
204 pub::set_dup(fixed_header_, dup);
205 }
206
207private:
208
209 template <std::size_t PacketIdBytesArg>
212
213#if defined(ASYNC_MQTT_UNIT_TEST_FOR_PACKET)
214 friend struct ::ut_packet::v311_publish;
215 friend struct ::ut_packet::v311_publish_qos0;
216 friend struct ::ut_packet::v311_publish_invalid;
217 friend struct ::ut_packet::v311_publish_pid4;
218 friend struct ::ut_packet::v311_publish_error;
219#endif // defined(ASYNC_MQTT_UNIT_TEST_FOR_PACKET)
220
221 // private constructor for internal use
222 explicit basic_publish_packet(buffer buf, error_code& ec);
223
224 struct tag_internal{};
225 explicit basic_publish_packet(
226 tag_internal,
228 buffer&& topic_name,
229 std::vector<buffer>&& payloads,
230 pub::opts pubopts
231 );
232
233private:
234 std::uint8_t fixed_header_;
235 buffer topic_name_;
236 static_vector<char, 2> topic_name_length_buf_;
237 static_vector<char, PacketIdBytes> packet_id_;
238 std::vector<buffer> payloads_;
239 std::size_t remaining_length_;
240 static_vector<char, 4> remaining_length_buf_;
241};
242
255template <std::size_t PacketIdBytes>
257
270template <std::size_t PacketIdBytes>
272
285template <std::size_t PacketIdBytes>
286std::ostream& operator<<(std::ostream& o, basic_publish_packet<PacketIdBytes> const& v);
287
299
300} // namespace async_mqtt::v3_1_1
301
302#include <async_mqtt/packet/impl/v3_1_1_publish.hpp>
303
304#if !defined(ASYNC_MQTT_SEPARATE_COMPILATION)
305#include <async_mqtt/packet/impl/v3_1_1_publish.ipp>
306#endif // !defined(ASYNC_MQTT_SEPARATE_COMPILATION)
307
308#endif // ASYNC_MQTT_PACKET_V3_1_1_PUBLISH_HPP
The varaint type of all packets and system_error.
Definition packet_variant_fwd.hpp:37
buffer that has string_view interface and shared ownership This class is only for advanced usecase su...
Definition buffer.hpp:46
MQTT PUBLISH packet (v3.1.1)
Definition v3_1_1_publish.hpp:61
std::string payload() const
Get payload.
basic_packet_id_type< PacketIdBytes >::type packet_id() const
Get packet id.
std::vector< buffer > const & payload_as_buffer() const
Get payload as a sequence of buffer.
bool operator==(basic_publish_packet< PacketIdBytes > const &lhs, basic_publish_packet< PacketIdBytes > const &rhs)
equal operator
basic_publish_packet(StringViewLike &&topic_name, Payload &&payloads, pub::opts pubopts)
constructor for QoS0 This constructor doesn't have packet_id parameter. The packet_id is set to 0 int...
std::vector< as::const_buffer > const_buffer_sequence() const
Create const buffer sequence it is for boost asio APIs.
auto payload_range() const
Get payload range.
basic_publish_packet(typename basic_packet_id_type< PacketIdBytes >::type packet_id, StringViewLike &&topic_name, Payload &&payloads, pub::opts pubopts)
constructor
buffer const & topic_as_buffer() const
Get topic as a buffer.
std::size_t num_of_const_buffer_sequence() const
Get number of element of const_buffer_sequence.
static constexpr control_packet_type type()
Get MQTT control packet type.
Definition v3_1_1_publish.hpp:132
constexpr void set_dup(bool dup)
Set dup flag.
Definition v3_1_1_publish.hpp:203
bool operator<(basic_publish_packet< PacketIdBytes > const &lhs, basic_publish_packet< PacketIdBytes > const &rhs)
less than operator
std::size_t size() const
Get packet size.
std::string topic() const
Get topic name.
std::ostream & operator<<(std::ostream &o, basic_publish_packet< PacketIdBytes > const &v)
stream output operator
constexpr pub::opts opts() const
Get publish_options.
Definition v3_1_1_publish.hpp:165
sys::error_code error_code
sys is a namespace alias of boost::sytem.
Definition error.hpp:56
protocol_version
MQTT protocol version.
Definition protocol_version.hpp:29
basic_packet_variant< PacketIdBytes > buffer_to_basic_packet_variant(buffer buf, protocol_version ver, error_code &ec)
create basic_packet_variant from the buffer
control_packet_type
MQTT control packet type.
Definition control_packet_type.hpp:26
constexpr void set_dup(std::uint8_t &fixed_header, bool dup)
Set DUP to the fixed header.
Definition pubopts.hpp:84
packet idenfitifer type class template
Definition packet_id_type.hpp:25
MQTT PublishOptions.
Definition pubopts.hpp:136