#include "mqtt_client_instance.h" #include "tbox_messages.h" #include "tcp_server_instance.h" std::unique_ptr tcp_server_tbox_v2v; static void handle_tbox_v2v_tcp_msg(const std::vector& data) { auto pkt = process_received_packet(data); if (pkt.command_id == 0 || pkt.response_flag != 0xFE) return; switch (pkt.command_id) { case 0xD3: case 0xD4: case 0xD6: { auto topic = build_mqtt_topic_by_cmd(pkt.command_id); if (topic.empty()) break; if (!mqtt_client_tbox_v2v || !mqtt_client_tbox_v2v->is_connected()) break; const size_t payload_len = pkt.data_unit.size(); LOG_INFO(v2v_logger, "[tbox_v2v][tcp->mqtt] publish, cmd=" + byte_to_hex(pkt.command_id) + ", topic=" + topic + ", payload_len=" + std::to_string(payload_len)); std::string payload_str(pkt.data_unit.begin(), pkt.data_unit.end()); mqtt_client_tbox_v2v->publish(topic, payload_str, 1); break; } default: { LOG_WARN(v2v_logger, "[tbox_v2v][tcp->mqtt] drop, unknown cmd, cmd=" + byte_to_hex(pkt.command_id) + ", payload_len=" + std::to_string(pkt.data_unit.size())); break; } } } void init_tcp_server_tbox_v2v(const std::string& ip, int port) // 初始化 TBoxV2V TCP 服务器 { std::string server_id = "tbox_v2v_tcp"; tcp_server_tbox_v2v = std::make_unique(server_id, ip, port, v2v_logger); tcp_server_tbox_v2v->set_receive_callback(handle_tbox_v2v_tcp_msg); tcp_server_tbox_v2v->start(); }