26 lines
1.0 KiB
C++
26 lines
1.0 KiB
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) {
|
||
|
|
spdlog::info("DataHandler is processing message from topic: {}", msg->get_topic());
|
||
|
|
try {
|
||
|
|
// (这里是原来 MqttRouter 中处理数据上报的逻辑)
|
||
|
|
auto received_json = json::parse(msg->get_payload_str());
|
||
|
|
if (received_json.contains("temperature")) {
|
||
|
|
double temp = received_json["temperature"];
|
||
|
|
json forward_json;
|
||
|
|
forward_json["source_topic"] = msg->get_topic();
|
||
|
|
forward_json["processed_temp"] = temp;
|
||
|
|
forward_json["timestamp"] = time(0);
|
||
|
|
const std::string output_topic = "proxy/processed/temperature";
|
||
|
|
m_client.publish(output_topic, forward_json.dump());
|
||
|
|
}
|
||
|
|
} catch (const json::parse_error& e) {
|
||
|
|
spdlog::error("JSON parse error in DataHandler: {}", e.what());
|
||
|
|
}
|
||
|
|
}
|