diff --git a/src/methane_serial_port.cpp b/src/methane_serial_port.cpp index d2c0560..30d986e 100644 --- a/src/methane_serial_port.cpp +++ b/src/methane_serial_port.cpp @@ -5,16 +5,67 @@ #include "methane_serial_port.hpp" #include #include - +#include +#include +#include +#include +#include #include "tcp_service.hpp" -void handle_response(const std::vector &buffer) { +namespace beast = boost::beast; +namespace http = beast::http; +namespace net = boost::asio; +using tcp = net::ip::tcp; + +void upload_to_server(const int value) { + //TODO 根据实际情况修改为服务器TCP客户端HTTP和端口 + const std::string server_address = "192.168.123.125"; + const std::string server_port = "30028"; + const std::string dog_code = "B42D4000OCAD3N82"; + net::io_context ioc; + tcp::resolver resolver{ioc}; + auto const results = resolver.resolve(server_address, server_port); + tcp::socket socket{ioc}; + try { + net::connect(socket, results.begin(), results.end()); + // 构建HTTP请求 + http::request req{http::verb::post, "/device/receiveData", 11}; + req.set(http::field::host, server_address); + req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING); + req.set(http::field::content_type, "application/json"); + req.set(http::field::connection, "keep-alive"); + //{"type":6,"devcode":"1212","data":{"gas":"20"}} + const std::string body = R"({"type":6,"devcode":")" + dog_code + R"(","data":{"gas":")" + std::to_string(value) + + "\"}}"; + req.body() = body; + req.prepare_payload(); + + // 发送HTTP请求 + http::write(socket, req); + } catch (std::exception const &e) { + std::cerr << "Error: " << e.what() << std::endl; + if (socket.is_open()) { + socket.shutdown(tcp::socket::shutdown_both); + socket.close(); + } + } +} + +void MethaneSerialPort::upload_to_server_async(const int value) { + post(io_service_, [this, value] { + upload_to_server(value); + }); +} + +void MethaneSerialPort::handle_response(const std::vector &buffer) { const auto x = buffer[2]; const auto y = buffer[3]; const auto z = buffer[4]; const auto w = buffer[5]; const auto result = x * (1 << 24) + y * (1 << 16) + z * (1 << 8) + w; TcpService::getInstance().update_gas_value(result); + //上传到服务器 + upload_to_server_async(result); } MethaneSerialPort::MethaneSerialPort( diff --git a/src/methane_serial_port.cpp b/src/methane_serial_port.cpp index d2c0560..30d986e 100644 --- a/src/methane_serial_port.cpp +++ b/src/methane_serial_port.cpp @@ -5,16 +5,67 @@ #include "methane_serial_port.hpp" #include #include - +#include +#include +#include +#include +#include #include "tcp_service.hpp" -void handle_response(const std::vector &buffer) { +namespace beast = boost::beast; +namespace http = beast::http; +namespace net = boost::asio; +using tcp = net::ip::tcp; + +void upload_to_server(const int value) { + //TODO 根据实际情况修改为服务器TCP客户端HTTP和端口 + const std::string server_address = "192.168.123.125"; + const std::string server_port = "30028"; + const std::string dog_code = "B42D4000OCAD3N82"; + net::io_context ioc; + tcp::resolver resolver{ioc}; + auto const results = resolver.resolve(server_address, server_port); + tcp::socket socket{ioc}; + try { + net::connect(socket, results.begin(), results.end()); + // 构建HTTP请求 + http::request req{http::verb::post, "/device/receiveData", 11}; + req.set(http::field::host, server_address); + req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING); + req.set(http::field::content_type, "application/json"); + req.set(http::field::connection, "keep-alive"); + //{"type":6,"devcode":"1212","data":{"gas":"20"}} + const std::string body = R"({"type":6,"devcode":")" + dog_code + R"(","data":{"gas":")" + std::to_string(value) + + "\"}}"; + req.body() = body; + req.prepare_payload(); + + // 发送HTTP请求 + http::write(socket, req); + } catch (std::exception const &e) { + std::cerr << "Error: " << e.what() << std::endl; + if (socket.is_open()) { + socket.shutdown(tcp::socket::shutdown_both); + socket.close(); + } + } +} + +void MethaneSerialPort::upload_to_server_async(const int value) { + post(io_service_, [this, value] { + upload_to_server(value); + }); +} + +void MethaneSerialPort::handle_response(const std::vector &buffer) { const auto x = buffer[2]; const auto y = buffer[3]; const auto z = buffer[4]; const auto w = buffer[5]; const auto result = x * (1 << 24) + y * (1 << 16) + z * (1 << 8) + w; TcpService::getInstance().update_gas_value(result); + //上传到服务器 + upload_to_server_async(result); } MethaneSerialPort::MethaneSerialPort( diff --git a/src/methane_serial_port.hpp b/src/methane_serial_port.hpp index 2d7a761..bef4a33 100644 --- a/src/methane_serial_port.hpp +++ b/src/methane_serial_port.hpp @@ -26,8 +26,11 @@ boost::asio::streambuf buffer_; void start_timer(); -}; + void handle_response(const std::vector &buffer); + + void upload_to_server_async(int value); +}; #endif //METHANE_SERIAL_PORT_HPP