49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
#include "mqtt_client_instance.h"
|
|
#include "tbox_messages.h"
|
|
#include "tcp_server_instance.h"
|
|
|
|
std::unique_ptr<TcpServer> tcp_server_tbox_v2v;
|
|
|
|
static void handle_tbox_v2v_tcp_msg(const std::vector<uint8_t>& 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<TcpServer>(server_id, ip, port, v2v_logger);
|
|
tcp_server_tbox_v2v->set_receive_callback(handle_tbox_v2v_tcp_msg);
|
|
tcp_server_tbox_v2v->start();
|
|
} |