kunlang_tbox/src/business/tbox/tcp_server_tbox_v2v.cpp

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();
}