paho-mqtt-cpp
MQTT C++ Client for POSIX and Windows
disconnect_options.h
Go to the documentation of this file.
1 
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 "MQTTAsync.h"
27 #include "mqtt/types.h"
28 #include "mqtt/token.h"
29 #include "mqtt/properties.h"
30 #include <chrono>
31 
32 namespace mqtt {
33 
35 
40 {
42  static const MQTTAsync_disconnectOptions DFLT_C_STRUCT;
43 
45  static const MQTTAsync_disconnectOptions DFLT_C_STRUCT5;
46 
48  MQTTAsync_disconnectOptions opts_;
49 
51  token_ptr tok_;
52 
54  properties props_;
55 
57  friend class async_client;
58 
61 
65  void update_c_struct();
66 
68  disconnect_options(const MQTTAsync_disconnectOptions& copts) : opts_{copts} {}
69 
70 public:
80  set_timeout(timeout);
81  }
86  template <class Rep, class Period>
87  disconnect_options(const std::chrono::duration<Rep, Period>& to)
88  : disconnect_options() {
89  set_timeout(to);
90  }
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  }
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  }
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  }
184  void set_properties(properties&& props) {
185  props_ = std::move(props);
186  opts_.properties = props_.c_struct();
187  }
193  return ReasonCode(opts_.reasonCode);
194  }
200  opts_.reasonCode = MQTTReasonCodes(code);
201  }
202 };
203 
205 
210 {
212  disconnect_options opts_;
213 
215  disconnect_options_builder(const MQTTAsync_disconnectOptions& copts) : opts_{copts} {}
216 
217 public:
238  auto properties(mqtt::properties&& props) -> self& {
239  opts_.set_properties(std::move(props));
240  return *this;
241  }
246  auto properties(const mqtt::properties& props) -> self& {
247  opts_.set_properties(props);
248  return *this;
249  }
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  }
264  auto reason_code(ReasonCode code) -> self& {
265  opts_.set_reason_code(code);
266  return *this;
267  }
272  disconnect_options finalize() { return opts_; }
273 };
274 
275 
277 // end namespace 'mqtt'
278 }
279 
280 #endif // __mqtt_disconnect_options_h
281 
Definition: async_client.h:108
Definition: disconnect_options.h:210
static disconnect_options_builder v3()
auto properties(const mqtt::properties &props) -> self &
Definition: disconnect_options.h:246
disconnect_options_builder()
Definition: disconnect_options.h:223
static disconnect_options_builder v5()
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
Definition: disconnect_options.h:40
static disconnect_options v5()
void set_timeout(int timeout)
Definition: disconnect_options.h:139
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
void set_token(const token_ptr &tok, int mqttVersion)
void set_properties(const properties &props)
Definition: disconnect_options.h:176
disconnect_options & operator=(disconnect_options &&opt)
disconnect_options & operator=(const disconnect_options &opt)
void set_reason_code(ReasonCode code)
Definition: disconnect_options.h:199
disconnect_options(const disconnect_options &opt)
disconnect_options(const std::chrono::duration< Rep, Period > &to)
Definition: disconnect_options.h:87
token_ptr get_token() const
Definition: disconnect_options.h:161
std::chrono::milliseconds get_timeout() const
Definition: disconnect_options.h:131
const properties & get_properties() const
Definition: disconnect_options.h:166
static disconnect_options v3()
disconnect_options(disconnect_options &&opt)
disconnect_options(int timeout)
Definition: disconnect_options.h:79
void set_properties(properties &&props)
Definition: disconnect_options.h:184
Definition: properties.h:256
const MQTTProperties & c_struct() const
Definition: properties.h:308
Definition: async_client.h:49
ReasonCode
Definition: types.h:57
token::ptr_t token_ptr
Definition: token.h:506
long to_milliseconds_count(const std::chrono::duration< Rep, Period > &dur)
Definition: types.h:149