68 lines
3.6 KiB
C++
68 lines
3.6 KiB
C++
#include "mqtt_callback.h"
|
|
|
|
mqtt_callback::mqtt_callback(mqtt::async_client *cli, std::shared_ptr<spdlog::logger> 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<std::string> intMsg;
|
|
boost::split(intMsg, static_cast<const std::string>(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]);
|
|
log_->trace("HB RELAY time: [{}]", mem_->commonStatus.relayLast);
|
|
} else if (!intMsg[mem_->comSettings.NODE].compare(mem_->comSettings.nodeNames["follower"])) {
|
|
mem_->commonStatus.followerRunning = true;
|
|
mem_->commonStatus.followerLast = std::stod(intMsg[mem_->comSettings.TS]);
|
|
log_->trace("HB FOLLOWER time: [{}]", mem_->commonStatus.followerLast);
|
|
} else if (!intMsg[mem_->comSettings.NODE].compare(mem_->comSettings.nodeNames["recorder"])) {
|
|
mem_->commonStatus.recorderRunning = true;
|
|
mem_->commonStatus.recorderLast = std::stod(intMsg[mem_->comSettings.TS]);
|
|
log_->trace("HB RECORDER time: [{}]", mem_->commonStatus.recorderLast);
|
|
} else if (!intMsg[mem_->comSettings.NODE].compare(mem_->comSettings.nodeNames["broadcaster"])) {
|
|
mem_->commonStatus.broadcasterRunning = true;
|
|
mem_->commonStatus.broadcasterLast = std::stod(intMsg[mem_->comSettings.TS]);
|
|
log_->trace("HB BROADCASTER time: [{}]", mem_->commonStatus.broadcasterLast);
|
|
} 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: {}", msg->get_topic().c_str());
|
|
}
|
|
}
|
|
|
|
void mqtt_callback::delivery_complete(mqtt::delivery_token_ptr tok) {
|
|
log_->trace("Message Delivery complete \n tok: {}", tok->get_message_id());
|
|
}
|
|
|