17 for(
const auto&
topic: self->config().topics)
19 mosquitto_subscribe(mosq,
nullptr,
topic.c_str(),
self->config().qos);
24 QMessageBox::warning(
nullptr,
"MQTT Client",
25 QString(
"Connection error: %1").
arg(mosquitto_reason_string(result)),
28 self->_connected =
true;
35 if( self->isConnected() && result == MOSQ_ERR_CONN_LOST )
41 void message_callback(
struct mosquitto *mosq,
void *context,
const struct mosquitto_message *message,
const mosquitto_property *)
52 _mosq = mosquitto_new(
nullptr,
true,
this);
65 mosquitto_lib_cleanup();
85 if( config.
cafile.empty() == false )
87 const char *cafile = config.
cafile.c_str();
88 const char *certfile = config.
certfile.empty() ?
nullptr: config.
certfile.c_str();
89 const char *keyfile = config.
keyfile.empty() ?
nullptr: config.
keyfile.c_str();
91 mosquitto_tls_set(
_mosq, cafile,
nullptr, certfile, keyfile,
nullptr);
96 const mosquitto_property *properties =
nullptr;
98 int rc = mosquitto_connect_bind_v5(
_mosq,
107 if(rc == MOSQ_ERR_ERRNO)
111 strerror_r(errno, err, 1024);
113 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, errno, 0, (LPTSTR)&err, 1024, NULL);
115 QMessageBox::warning(
nullptr,
"MQTT Client",
116 QString(
"Error: %1").
arg(err), QMessageBox::Ok);
120 QMessageBox::warning(
nullptr,
"MQTT Client",
121 QString(
"Unable to connect (%1)").
arg(mosquitto_strerror(rc)),
130 mosquitto_loop_start(
_mosq);
138 mosquitto_disconnect(
_mosq);
139 mosquitto_loop_stop(
_mosq,
true);
153 std::unique_lock<std::mutex> lk(
_mutex);
159 std::unique_lock<std::mutex> lk(
_mutex);
177 std::unique_lock<std::mutex> lk(
_mutex);
183 mosquitto_subscribe(
_mosq,
nullptr, topic.c_str(), qos);
188 mosquitto_unsubscribe(
_mosq,
nullptr, topic.c_str());
std::function< void(const mosquitto_message *)> TopicCallback
std::unordered_map< std::string, TopicCallback > _message_callbacks
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
void addMessageCallback(const std::string &topic, TopicCallback callback)
void message_callback(struct mosquitto *mosq, void *context, const struct mosquitto_message *message, const mosquitto_property *)
std::unordered_set< std::string > getTopicList()
void connect_callback(struct mosquitto *mosq, void *context, int result, int, const mosquitto_property *)
void subscribe(const std::string &topic, int qos)
unsigned int max_inflight
bool connect(const MosquittoConfig &config)
const MosquittoConfig & config() const
std::unordered_set< std::string > _topics_set
void onMessageReceived(const mosquitto_message *message)
void unsubscribe(const std::string &topic)
void disconnect_callback(struct mosquitto *mosq, void *context, int result)