25 #ifndef __mqtt_token_h 26 #define __mqtt_token_h 28 #include "MQTTAsync.h" 39 #include <condition_variable> 56 using ptr_t = std::shared_ptr<token>;
73 using guard = std::lock_guard<std::mutex>;
75 using unique_lock = std::unique_lock<std::mutex>;
78 mutable std::mutex lock_;
80 mutable std::condition_variable cond_;
93 MQTTAsync_token msgId_;
113 std::unique_ptr<connect_response> connRsp_;
115 std::unique_ptr<subscribe_response> subRsp_;
117 std::unique_ptr<unsubscribe_response> unsubRsp_;
137 void set_message_id(MQTTAsync_token msgId) {
150 static void on_success(
void* tokObj, MQTTAsync_successData* rsp);
151 static void on_success5(
void* tokObj, MQTTAsync_successData5* rsp);
161 static void on_failure(
void* tokObj, MQTTAsync_failureData* rsp);
162 static void on_failure5(
void* tokObj, MQTTAsync_failureData5* rsp);
169 static void on_connected(
void* tokObj,
char* );
174 void on_success(MQTTAsync_successData* rsp);
175 void on_success5(MQTTAsync_successData5* rsp);
180 void on_failure(MQTTAsync_failureData* rsp);
181 void on_failure5(MQTTAsync_failureData5* rsp);
187 void check_ret()
const {
189 throw exception(rc_, reasonCode_, errMsg_);
199 :
token(typ, cli, MQTTAsync_token(0)) {}
271 return std::make_shared<token>(typ, cli);
284 return std::make_shared<token>(typ, cli, userContext, cb);
293 return std::make_shared<token>(typ, cli,
topic);
307 return std::make_shared<token>(typ, cli,
topic, userContext, cb);
316 return std::make_shared<token>(typ, cli, topics);
330 return std::make_shared<token>(typ, cli, topics, userContext, cb);
357 static_assert(
sizeof(msgId_) <=
sizeof(
int),
"MQTTAsync_token must fit into int");
395 listener_ = &listener;
404 userContext_ = userContext;
447 return wait_for(std::chrono::milliseconds(timeout));
455 template <
class Rep,
class Period>
456 bool wait_for(
const std::chrono::duration<Rep, Period>& relTime) {
457 unique_lock g(lock_);
458 if (!cond_.wait_for(g, std::chrono::milliseconds(relTime),
459 [
this]{return complete_;}))
470 template <
class Clock,
class Duration>
471 bool wait_until(
const std::chrono::time_point<Clock, Duration>& absTime) {
472 unique_lock g(lock_);
473 if (!cond_.wait_until(g, absTime, [
this]{return complete_;}))
516 #endif // __mqtt_token_h static ptr_t create(Type typ, iasync_client &cli, const string &topic, void *userContext, iaction_listener &cb)
Definition: token.h:305
unsubscribe_response get_unsubscribe_response() const
Definition: response_options.h:203
Definition: async_client.h:107
token(Type typ, iasync_client &cli)
Definition: token.h:198
Definition: iaction_listener.h:48
token::const_ptr_t const_token_ptr
Definition: token.h:509
std::weak_ptr< token > weak_ptr_t
Definition: token.h:60
connect_response get_connect_response() const
string_collection::const_ptr_t const_string_collection_ptr
Definition: string_collection.h:234
Type
Definition: token.h:63
virtual iaction_listener * get_action_callback() const
Definition: token.h:342
Definition: connect_options.h:48
Definition: server_response.h:74
subscribe_response get_subscribe_response() const
virtual bool is_complete() const
Definition: token.h:381
virtual void set_user_context(void *userContext)
Definition: token.h:402
static ptr_t create(Type typ, iasync_client &cli, const_string_collection_ptr topics, void *userContext, iaction_listener &cb)
Definition: token.h:328
virtual void set_action_callback(iaction_listener &listener)
Definition: token.h:393
static ptr_t create(Type typ, iasync_client &cli, const_string_collection_ptr topics)
Definition: token.h:315
void set_num_expected(size_t n)
Definition: token.h:411
Type get_type() const
Definition: token.h:337
virtual void * get_user_context() const
Definition: token.h:373
Definition: string_collection.h:42
static ptr_t create(Type typ, iasync_client &cli)
Definition: token.h:270
Definition: exception.h:46
bool wait_until(const std::chrono::time_point< Clock, Duration > &absTime)
Definition: token.h:471
virtual bool wait_for(long timeout)
Definition: token.h:446
Definition: iasync_client.h:58
std::shared_ptr< const token > const_ptr_t
Definition: token.h:58
virtual int get_message_id() const
Definition: token.h:356
virtual iasync_client * get_client() const
Definition: token.h:351
token(Type typ, iasync_client &cli, void *userContext, iaction_listener &cb)
Definition: token.h:209
friend class mock_async_client
Definition: token.h:121
token::ptr_t token_ptr
Definition: token.h:506
ReasonCode
Definition: types.h:57
virtual bool try_wait()
Definition: token.h:433
virtual const_string_collection_ptr get_topics() const
Definition: token.h:366
static ptr_t create(Type typ, iasync_client &cli, const string &topic)
Definition: token.h:292
Definition: server_response.h:176
ReasonCode get_reason_code() const
Definition: token.h:422
std::shared_ptr< token > ptr_t
Definition: token.h:56
Definition: response_options.h:34
virtual int get_return_code() const
Definition: token.h:388
Definition: async_client.h:49
Definition: server_response.h:122
token(Type typ, iasync_client &cli, const string &topic, void *userContext, iaction_listener &cb)
Definition: token.h:230
token(Type typ, iasync_client &cli, const string &topic)
Definition: token.h:218
virtual ~token()
Definition: token.h:263
Definition: disconnect_options.h:39
bool wait_for(const std::chrono::duration< Rep, Period > &relTime)
Definition: token.h:456
static ptr_t create(Type typ, iasync_client &cli, void *userContext, iaction_listener &cb)
Definition: token.h:282