Newer
Older
casic_unitree_dog / src / message_handler.cpp
#include <filesystem>
#include <fstream>
#include <iostream>
#include <thread>
#include <boost/asio.hpp>

#include "tcp_service.hpp"
#include "tcp_client.hpp"
#include "methane_serial_port.hpp"
#include "config.hpp"

namespace fs = std::filesystem;

int main() {
    //启动TCP服务端
    std::thread service_thread([] {
        boost::asio::io_service io;
        TcpService::getInstance().start(Config::TCP_SERVICE_LOCALE_PORT);
        io.run();
    });

    // 启动TCP客户端
    std::thread client_thread([] {
        boost::asio::io_service io;
        TcpClient client;
        client.connect(Config::REMOTE_SERVICE_IP, Config::TCP_SERVICE_REMOTE_PORT);
        io.run();
    });

    //启动甲烷数据查询串口线程
    std::thread gas_serial_port_thread([] {
        try {
            boost::asio::io_service io;
            //打开串口
            MethaneSerialPort sp(io, Config::GAS_PORT, Config::BAUD_RATE); //甲烷串口
            sp.read_from_port();
            io.run();
        } catch (std::exception &e) {
            std::cerr << "\033[33m"
                    "MessageHandler [MethaneSerialPort]" << e.what()
                    << "\033[0m" << std::endl;
        }
    });

    // 拉起第三方脚本
    // std::thread script_thread([] {
    //     fs::current_path(Config::SLAM_SCRIPT_PATH);
    //     for (const auto &entry: fs::directory_iterator(fs::current_path())) {
    //         if (entry.is_regular_file() && entry.path().extension() == ".sh") {
    //             const auto script_path = entry.path();
    //             if (const pid_t pid = fork(); pid == 0) {
    //                 // 子进程执行脚本
    //                 std::ostringstream cmd_ss;
    //                 cmd_ss << "./"
    //                         << script_path.filename().string()
    //                         << " > "
    //                         << Config::SLAM_LOG_FILE << " 2>&1";
    //                 const std::string command = cmd_ss.str();
    //
    //                 execl("/bin/sh", "sh", "-c", command.c_str(), nullptr);
    //                 // 如果执行失败
    //                 std::cerr << "\033[33m"
    //                         << "Failed to execute script."
    //                         << "\033[0m" << std::endl;
    //                 exit(EXIT_FAILURE);
    //             }
    //             break;
    //         }
    //     }
    // });

    // 等待所有线程完成
    service_thread.join();
    client_thread.join();
    gas_serial_port_thread.join();
    // script_thread.join();
    return 0;
}