///////////////////////////////////////////////////////////////////////////// /// @file delivery_token.h /// Declaration of MQTT delivery_token class /// @date May 1, 2013 /// @author Frank Pagliughi ///////////////////////////////////////////////////////////////////////////// /******************************************************************************* * Copyright (c) 2013-2016 Frank Pagliughi * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Frank Pagliughi - initial implementation and documentation *******************************************************************************/ #ifndef __mqtt_delivery_token_h #define __mqtt_delivery_token_h #include "MQTTAsync.h" #include "mqtt/token.h" #include "mqtt/message.h" #include namespace mqtt { ///////////////////////////////////////////////////////////////////////////// /** * Provides a mechanism to track the delivery progress of a message. * Used to track the the delivery progress of a message when a publish is * executed in a non-blocking manner (run in the background) action. */ class delivery_token : public token { /** The message being tracked. */ const_message_ptr msg_; /** Client has special access. */ friend class async_client; /** * Sets the message to which this token corresponds. * @param msg */ void set_message(const_message_ptr msg) { msg_ = msg; } public: /** Smart/shared pointer to an object of this class */ using ptr_t = std::shared_ptr; /** Smart/shared pointer to a const object of this class */ using const_ptr_t = std::shared_ptr; /** Weak pointer to an object of this class */ using weak_ptr_t = std::weak_ptr; /** * Creates an empty delivery token connected to a particular client. * @param cli The asynchronous client object. */ delivery_token(iasync_client& cli) : token(token::Type::PUBLISH, cli) {} /** * Creates a delivery token connected to a particular client. * @param cli The asynchronous client object. * @param msg The message being tracked. */ delivery_token(iasync_client& cli, const_message_ptr msg) : token(token::Type::PUBLISH, cli, msg->get_topic()), msg_(std::move(msg)) {} /** * Creates a delivery token connected to a particular client. * @param cli The asynchronous client object. * @param msg The message data. * @param userContext optional object used to pass context to the * callback. Use @em nullptr if not required. * @param cb callback optional listener that will be notified when message * delivery has completed to the requested quality of * service */ delivery_token(iasync_client& cli, const_message_ptr msg, void* userContext, iaction_listener& cb) : token(token::Type::PUBLISH, cli, msg->get_topic(), userContext, cb), msg_(std::move(msg)) {} /** * Creates an empty delivery token connected to a particular client. * @param cli The asynchronous client object. */ static ptr_t create(iasync_client& cli) { return std::make_shared(cli); } /** * Creates a delivery token connected to a particular client. * @param cli The asynchronous client object. * @param msg The message data. */ static ptr_t create(iasync_client& cli, const_message_ptr msg) { return std::make_shared(cli, msg); } /** * Creates a delivery token connected to a particular client. * @param cli The asynchronous client object. * @param msg The message data. * @param userContext optional object used to pass context to the * callback. Use @em nullptr if not required. * @param cb callback optional listener that will be notified when message * delivery has completed to the requested quality of * service */ static ptr_t create(iasync_client& cli, const_message_ptr msg, void* userContext, iaction_listener& cb) { return std::make_shared(cli, msg, userContext, cb); } /** * Gets the message associated with this token. * @return The message associated with this token. */ virtual const_message_ptr get_message() const { return msg_; } }; /** Smart/shared pointer to a delivery_token */ using delivery_token_ptr = delivery_token::ptr_t; /** Smart/shared pointer to a const delivery_token */ using const_delivery_token_ptr = delivery_token::const_ptr_t; ///////////////////////////////////////////////////////////////////////////// // end namespace mqtt } #endif // __mqtt_delivery_token_h