code
This commit is contained in:
160
Plugins/MqttClient/Source/DTMqtt/MqttCPP/topic.h
Normal file
160
Plugins/MqttClient/Source/DTMqtt/MqttCPP/topic.h
Normal file
@ -0,0 +1,160 @@
|
||||
// Copyright 2023 Dexter.Wan. All Rights Reserved.
|
||||
// EMail: 45141961@qq.com
|
||||
|
||||
#ifndef __mqtt_topic_h
|
||||
#define __mqtt_topic_h
|
||||
|
||||
#include "MQTTAsync.h"
|
||||
#include "delivery_token.h"
|
||||
#include "subscribe_options.h"
|
||||
#include "message.h"
|
||||
#include "types.h"
|
||||
#include <vector>
|
||||
|
||||
namespace mqtt {
|
||||
|
||||
class iasync_client;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Represents a topic destination, used for publish/subscribe messaging.
|
||||
*/
|
||||
class topic
|
||||
{
|
||||
/** The client to which this topic is connected */
|
||||
iasync_client& cli_;
|
||||
/** The topic name */
|
||||
string name_;
|
||||
/** The default QoS */
|
||||
int qos_;
|
||||
/** The default retined flag */
|
||||
bool retained_;
|
||||
|
||||
public:
|
||||
/** A smart/shared pointer to this class. */
|
||||
using ptr_t = std::shared_ptr<topic>;
|
||||
/** A smart/shared pointer to this class. */
|
||||
using const_ptr_t = std::shared_ptr<const topic>;
|
||||
|
||||
/**
|
||||
* Construct an MQTT topic destination for messages.
|
||||
* @param cli Client to which the topic is attached
|
||||
* @param name The topic string
|
||||
* @param qos The default QoS for publishing.
|
||||
* @param retained The default retained flag for the topic.
|
||||
*/
|
||||
topic(iasync_client& cli, const string& name,
|
||||
int qos=message::DFLT_QOS, bool retained=message::DFLT_RETAINED)
|
||||
: cli_(cli), name_(name), qos_(qos), retained_(retained) {}
|
||||
/**
|
||||
* Creates a new topic
|
||||
* @param cli Client to which the topic is attached
|
||||
* @param name The topic string
|
||||
* @param qos The default QoS for publishing.
|
||||
* @param retained The default retained flag for the topic.
|
||||
* @return A shared pointer to the topic.
|
||||
*/
|
||||
static ptr_t create(iasync_client& cli, const string& name,
|
||||
int qos=message::DFLT_QOS,
|
||||
bool retained=message::DFLT_RETAINED) {
|
||||
return std::make_shared<topic>(cli, name, qos, retained);
|
||||
}
|
||||
/**
|
||||
* Gets a reference to the MQTT client used by this topic
|
||||
* @return The MQTT client used by this topic
|
||||
*/
|
||||
iasync_client& get_client() { return cli_; }
|
||||
/**
|
||||
* Gets the name of the topic.
|
||||
* @return The name of the topic.
|
||||
*/
|
||||
const string& get_name() const { return name_; }
|
||||
/**
|
||||
* Gets the default quality of service for this topic.
|
||||
* @return The default quality of service for this topic.
|
||||
*/
|
||||
int get_qos() const { return qos_; }
|
||||
/**
|
||||
* Gets the default retained flag used for this topic.
|
||||
* @return The default retained flag used for this topic.
|
||||
*/
|
||||
bool get_retained() const { return retained_; }
|
||||
/**
|
||||
* Sets the default quality of service for this topic.
|
||||
* @param qos The default quality of service for this topic.
|
||||
*/
|
||||
void set_qos(int qos) {
|
||||
message::validate_qos(qos);
|
||||
qos_ = qos;
|
||||
}
|
||||
/**
|
||||
* Sets the default retained flag used for this topic.
|
||||
* @param retained The default retained flag used for this topic.
|
||||
*/
|
||||
void set_retained(bool retained) { retained_ = retained; }
|
||||
/**
|
||||
* Publishes a message on the topic using the default QoS and retained
|
||||
* flag.
|
||||
* @param payload the bytes to use as the message payload
|
||||
* @param n the number of bytes in the payload
|
||||
* @return The delivery token used to track and wait for the publish to
|
||||
* complete.
|
||||
*/
|
||||
delivery_token_ptr publish(const void* payload, size_t n);
|
||||
/**
|
||||
* Publishes a message on the topic.
|
||||
* @param payload the bytes to use as the message payload
|
||||
* @param n the number of bytes in the payload
|
||||
* @param qos the Quality of Service to deliver the message at. Valid
|
||||
* values are 0, 1 or 2.
|
||||
* @param retained whether or not this message should be retained by the
|
||||
* server.
|
||||
* @return The delivery token used to track and wait for the publish to
|
||||
* complete.
|
||||
*/
|
||||
delivery_token_ptr publish(const void* payload, size_t n,
|
||||
int qos, bool retained);
|
||||
/**
|
||||
* Publishes a message on the topic using the default QoS and retained
|
||||
* flag.
|
||||
* @param payload the bytes to use as the message payload
|
||||
* @return The delivery token used to track and wait for the publish to
|
||||
* complete.
|
||||
*/
|
||||
delivery_token_ptr publish(binary_ref payload);
|
||||
/**
|
||||
* Publishes a message on the topic.
|
||||
* @param payload the bytes to use as the message payload
|
||||
* @param qos the Quality of Service to deliver the message at. Valid
|
||||
* values are 0, 1 or 2.
|
||||
* @param retained whether or not this message should be retained by the
|
||||
* server.
|
||||
* @return The delivery token used to track and wait for the publish to
|
||||
* complete.
|
||||
*/
|
||||
delivery_token_ptr publish(binary_ref payload, int qos, bool retained);
|
||||
/**
|
||||
* Subscribe to the topic.
|
||||
* @return A token used to track the progress of the operation.
|
||||
*/
|
||||
token_ptr subscribe(const subscribe_options& opts=subscribe_options());
|
||||
/**
|
||||
* Returns a string representation of this topic.
|
||||
* @return The name of the topic
|
||||
*/
|
||||
string to_string() const { return name_; }
|
||||
};
|
||||
|
||||
/** A smart/shared pointer to a topic object. */
|
||||
using topic_ptr = topic::ptr_t ;
|
||||
|
||||
/** A smart/shared pointer to a const topic object. */
|
||||
using const_topic_ptr = topic::const_ptr_t ;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// end namespace mqtt
|
||||
}
|
||||
|
||||
#endif // __mqtt_topic_h
|
||||
|
Reference in New Issue
Block a user