2 * Copyright (C) 2019 Konsulko Group
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "mqttclient.h"
23 static void on_connect(struct mosquitto *mosq, void *obj, int rc)
25 std::cerr << " MQTT Connected, rc = " << rc << std::endl;
28 static void on_disconnect(struct mosquitto *mosq, void *obj, int rc)
30 std::cerr << " MQTT Disconnected, rc = " << rc << std::endl;
34 MqttClient::MqttClient(const std::string &id, const std::string &host, const int port, const int keepalive, const std::string &username, const std::string &password)
37 m_mosq = mosquitto_new(id.c_str(), true, NULL);
40 mosquitto_connect_callback_set(m_mosq, on_connect);
41 mosquitto_disconnect_callback_set(m_mosq, on_disconnect);
45 mosquitto_username_pw_set(m_mosq, username.c_str(), password.c_str());
47 if(mosquitto_connect_async(m_mosq, host.c_str(), port, keepalive)) {
48 std::cerr << __FUNCTION__ << ": Unable to connect to " << host << std::endl;
51 int loop = mosquitto_loop_start(m_mosq);
52 if(loop != MOSQ_ERR_SUCCESS){
53 std::cerr << __FUNCTION__ << ": Unable to start loop, error = " << loop << std::endl;
57 MqttClient::~MqttClient(void)
59 mosquitto_disconnect(m_mosq);
60 mosquitto_loop_stop(m_mosq, true);
61 mosquitto_destroy(m_mosq);
62 mosquitto_lib_cleanup();
65 int MqttClient::publish(const std::string &topic, const std::string &msg, const int qos, const bool retain)
67 return mosquitto_publish(m_mosq, NULL, topic.c_str(), msg.length(), msg.c_str(), qos, retain);