bonus-edge-proxy/src/mqtt/handler/data_handler.cpp

30 lines
993 B
C++

#include "data_handler.h"
#include "spdlog/spdlog.h"
#include "vendor/nlohmann/json.hpp"
using json = nlohmann::json;
DataHandler::DataHandler(MqttClient& client) : m_client(client) {}
void DataHandler::handle(mqtt::const_message_ptr msg) {
const auto& input_topic = msg->get_topic();
const auto& payload_str = msg->get_payload_str();
spdlog::debug("DataHandler received data from topic: {}", input_topic);
try {
auto payload_json = json::parse(payload_str);
payload_json["_proxy_source_topic"] = input_topic;
payload_json["_proxy_processed_ts"] = time(nullptr);
const std::string output_topic = "proxy/processed/data";
m_client.publish(output_topic, payload_json.dump());
spdlog::debug("Successfully forwarded data from '{}' to '{}'", input_topic, output_topic);
} catch (const json::parse_error& e) {
spdlog::error("JSON parse error in DataHandler for topic '{}': {}", input_topic, e.what());
}
}