#include "mqtt_callback.h" mqtt_callback::mqtt_callback(mqtt::async_client *cli, std::shared_ptr log, RoboGlue_SHARED *mem) { //initialize client pointer cli_=cli; log_=log; mem_= mem; } void mqtt_callback::connected(const mqtt::string &cause) { log_->info("MQTT client Connected: {}", cause.c_str()); } void mqtt_callback::connection_lost(const mqtt::string &cause) { log_->info("MQTT client Disconnected {}", cause.c_str()); } void mqtt_callback::message_arrived(mqtt::const_message_ptr msg) { log_->debug("Message Arrived: topic->{} - message->{}", msg->get_topic(), msg->to_string()); if(msg->get_topic() == mem_->comSettings.subMap.find("interface")->second) { log_->debug("MQTT: Interface Message: {}", msg->get_payload().c_str()); // Gestione dei messaggi di interfaccia std::vector intMsg; boost::split(intMsg, static_cast(msg->to_string()), boost::is_any_of(":")); if (!intMsg[mem_->comSettings.TYPE].compare("STARTUP") || !intMsg[mem_->comSettings.TYPE].compare("HB")){ // Received Startup Message log_->debug("Startup/Heartbeat from node, ts: {},[{}]", intMsg[mem_->comSettings.NODE].c_str(), intMsg[mem_->comSettings.TS]); if (!intMsg[mem_->comSettings.NODE].compare(mem_->comSettings.nodeNames["relay"])){ mem_->commonStatus.relayRunning = true; mem_->commonStatus.relayLast = std::stod(intMsg[mem_->comSettings.TS]); } else if (!intMsg[mem_->comSettings.NODE].compare(mem_->comSettings.nodeNames["follower"])) { mem_->commonStatus.followerRunning = true; mem_->commonStatus.followerLast = std::stod(intMsg[mem_->comSettings.TS]); } else if (!intMsg[mem_->comSettings.NODE].compare(mem_->comSettings.nodeNames["recorder"])) { mem_->commonStatus.recorderRunning = true; mem_->commonStatus.recorderLast = std::stod(intMsg[mem_->comSettings.TS]); } else { log_->error("Node {} unknown", intMsg[mem_->comSettings.NODE].c_str()); } emit mem_->commonStatusChange(); } } else if (msg->get_topic() == mem_->comSettings.subMap.find("state")->second){ log_->debug("MQTT: State Message: {}", msg->get_payload().c_str()); } else if (msg->get_topic() == mem_->comSettings.subMap.find("commands")->second){ log_->debug("MQTT: Command Message: {}", msg->get_payload().c_str()); } else if (msg->get_topic() == mem_->comSettings.subMap.find("coordinates")->second){ log_->debug("MQTT: Coordinate Message: {}", msg->get_payload().c_str()); } else { log_->error("Unrecognized topic"); } } void mqtt_callback::delivery_complete(mqtt::delivery_token_ptr tok) { log_->trace("Message Delivery complete \n tok: {}", tok->get_message_id()); }