PahoMqttCpp
MQTT C++ Client for POSIX and Windows
Loading...
Searching...
No Matches
disconnect_options.h
Go to the documentation of this file.
1
6
7/****************************************************************************
8 * Copyright (c) 2016-2017 Frank Pagliughi <fpagliughi@mindspring.com>
9 *
10 * All rights reserved. This program and the accompanying materials
11 * are made available under the terms of the Eclipse Public License v2.0
12 * and Eclipse Distribution License v1.0 which accompany this distribution.
13 *
14 * The Eclipse Public License is available at
15 * http://www.eclipse.org/legal/epl-v20.html
16 * and the Eclipse Distribution License is available at
17 * http://www.eclipse.org/org/documents/edl-v10.php.
18 *
19 * Contributors:
20 * Frank Pagliughi - initial implementation and documentation
21 ***************************************************************************/
22
23#ifndef __mqtt_disconnect_options_h
24#define __mqtt_disconnect_options_h
25
26#include <chrono>
27
28#include "MQTTAsync.h"
29#include "mqtt/properties.h"
30#include "mqtt/token.h"
31#include "mqtt/types.h"
32
33namespace mqtt {
34
36
40class disconnect_options
41{
43 static constexpr MQTTAsync_disconnectOptions DFLT_C_STRUCT
44 MQTTAsync_disconnectOptions_initializer;
45
47 static constexpr MQTTAsync_disconnectOptions DFLT_C_STRUCT5
48 MQTTAsync_disconnectOptions_initializer5;
49
51 MQTTAsync_disconnectOptions opts_{DFLT_C_STRUCT};
52
54 token_ptr tok_;
55
57 properties props_;
58
60 friend class async_client;
61
64
68 void update_c_struct();
69
71 disconnect_options(const MQTTAsync_disconnectOptions& copts) : opts_{copts} {}
72
73public:
82 disconnect_options(int timeout) : disconnect_options() { set_timeout(timeout); }
87 template <class Rep, class Period>
88 disconnect_options(const std::chrono::duration<Rep, Period>& to) : disconnect_options() {
89 set_timeout(to);
90 }
91
95 disconnect_options(const disconnect_options& opt);
100 disconnect_options(disconnect_options&& opt);
105 static disconnect_options v3() { return disconnect_options{DFLT_C_STRUCT}; }
110 static disconnect_options v5() { return disconnect_options{DFLT_C_STRUCT5}; }
115 disconnect_options& operator=(const disconnect_options& opt);
120 disconnect_options& operator=(disconnect_options&& opt);
124#if defined(UNIT_TESTS)
125 const MQTTAsync_disconnectOptions& c_struct() const { return opts_; }
126#endif
131 std::chrono::milliseconds get_timeout() const {
132 return std::chrono::milliseconds(opts_.timeout);
133 }
134
139 void set_timeout(int timeout) { opts_.timeout = timeout; }
145 template <class Rep, class Period>
146 void set_timeout(const std::chrono::duration<Rep, Period>& to) {
147 // TODO: check range
149 }
150
156 void set_token(const token_ptr& tok, int mqttVersion);
161 token_ptr get_token() const { return tok_; }
166 const properties& get_properties() const { return props_; }
171 properties& get_properties() { return props_; }
176 void set_properties(const properties& props) {
177 props_ = props;
178 opts_.properties = props_.c_struct();
179 }
180
185 props_ = std::move(props);
186 opts_.properties = props_.c_struct();
187 }
188
192 ReasonCode get_reason_code() const { return ReasonCode(opts_.reasonCode); }
197 void set_reason_code(ReasonCode code) { opts_.reasonCode = MQTTReasonCodes(code); }
198};
199
201
205class disconnect_options_builder
206{
208 disconnect_options opts_;
209
211 disconnect_options_builder(const MQTTAsync_disconnectOptions& copts) : opts_{copts} {}
212
213public:
215 using self = disconnect_options_builder;
224 static disconnect_options_builder v3() {
225 return disconnect_options_builder{disconnect_options::DFLT_C_STRUCT};
226 }
227
231 static disconnect_options_builder v5() {
232 return disconnect_options_builder{disconnect_options::DFLT_C_STRUCT5};
233 }
234
238 auto properties(mqtt::properties&& props) -> self& {
239 opts_.set_properties(std::move(props));
240 return *this;
241 }
242
246 auto properties(const mqtt::properties& props) -> self& {
247 opts_.set_properties(props);
248 return *this;
249 }
250
255 template <class Rep, class Period>
256 auto timeout(const std::chrono::duration<Rep, Period>& to) -> self& {
257 opts_.set_timeout(to);
258 return *this;
259 }
260
264 auto reason_code(ReasonCode code) -> self& {
265 opts_.set_reason_code(code);
266 return *this;
267 }
268
272 disconnect_options finalize() { return opts_; }
273};
274
276} // namespace mqtt
277
278#endif // __mqtt_disconnect_options_h
static disconnect_options_builder v3()
Definition disconnect_options.h:224
auto properties(const mqtt::properties &props) -> self &
Definition disconnect_options.h:246
disconnect_options_builder()
Definition disconnect_options.h:219
static disconnect_options_builder v5()
Definition disconnect_options.h:231
disconnect_options finalize()
Definition disconnect_options.h:272
auto timeout(const std::chrono::duration< Rep, Period > &to) -> self &
Definition disconnect_options.h:256
auto reason_code(ReasonCode code) -> self &
Definition disconnect_options.h:264
auto properties(mqtt::properties &&props) -> self &
Definition disconnect_options.h:238
disconnect_options_builder self
Definition disconnect_options.h:215
Definition disconnect_options.h:41
static disconnect_options v5()
Definition disconnect_options.h:110
void set_timeout(int timeout)
Definition disconnect_options.h:139
disconnect_options()
Definition disconnect_options.h:77
friend class disconnect_options_builder
Definition disconnect_options.h:63
const properties & get_properties() const
Definition disconnect_options.h:166
ReasonCode get_reason_code() const
Definition disconnect_options.h:192
void set_timeout(const std::chrono::duration< Rep, Period > &to)
Definition disconnect_options.h:146
properties & get_properties()
Definition disconnect_options.h:171
disconnect_options & operator=(const disconnect_options &opt)
void set_token(const token_ptr &tok, int mqttVersion)
void set_properties(const properties &props)
Definition disconnect_options.h:176
void set_reason_code(ReasonCode code)
Definition disconnect_options.h:197
disconnect_options & operator=(disconnect_options &&opt)
disconnect_options(const disconnect_options &opt)
disconnect_options(const std::chrono::duration< Rep, Period > &to)
Definition disconnect_options.h:88
token_ptr get_token() const
Definition disconnect_options.h:161
std::chrono::milliseconds get_timeout() const
Definition disconnect_options.h:131
friend class async_client
Definition disconnect_options.h:60
static disconnect_options v3()
Definition disconnect_options.h:105
disconnect_options(disconnect_options &&opt)
disconnect_options(int timeout)
Definition disconnect_options.h:82
void set_properties(properties &&props)
Definition disconnect_options.h:184
Definition properties.h:293
properties()
Definition properties.h:358
Definition async_client.h:60
ReasonCode
Definition reason_code.h:39
token::ptr_t token_ptr
Definition token.h:513
long to_milliseconds_count(const std::chrono::duration< Rep, Period > &dur)
Definition types.h:95