diff --git a/kirdy.cpp b/kirdy.cpp index 0fadd39..d05d007 100644 --- a/kirdy.cpp +++ b/kirdy.cpp @@ -7,32 +7,22 @@ Kirdy::Kirdy(asio::string_view host, asio::string_view service) { - asio::ip::tcp::resolver resolver(io_context); - asio::ip::tcp::resolver::results_type endpoints = resolver.resolve(host, service); - socket = new asio::ip::tcp::socket(io_context); - asio::connect(*socket, endpoints); -} - -Kirdy::~Kirdy() -{ - delete socket; + socket.connect(host, service); } Json::Value Kirdy::command(Json::Value &request) { Json::StreamWriterBuilder builder_w; std::string request_str = Json::writeString(builder_w, request); - asio::write(*socket, asio::buffer(request_str + "\n")); - - std::cout << request_str << std::endl; + socket << request_str; std::string reply_str; - std::size_t len = asio::read_until(*socket, asio::dynamic_buffer(reply_str, 1024), '\n'); + std::getline(socket, reply_str); Json::CharReaderBuilder builder_r; const std::unique_ptr reader(builder_r.newCharReader()); Json::Value reply; JSONCPP_STRING err; - if(!reader->parse(reply_str.c_str(), reply_str.c_str() + len, &reply, &err)) + if(!reader->parse(reply_str.data(), reply_str.data() + reply_str.size(), &reply, &err)) std::cerr << "JSON parse error: " << err << std::endl; return reply; } @@ -44,4 +34,3 @@ float Kirdy::get_laser_temp() auto reply = command(json); return reply["thermostat"]["temperature"].asFloat(); } - diff --git a/kirdy.hpp b/kirdy.hpp index 2a821c5..6ecafcb 100644 --- a/kirdy.hpp +++ b/kirdy.hpp @@ -5,11 +5,9 @@ class Kirdy { private: - asio::io_context io_context; - asio::ip::tcp::socket *socket; + asio::ip::tcp::iostream socket; Json::Value command(Json::Value &request); public: Kirdy(asio::string_view host, asio::string_view service); - ~Kirdy(); float get_laser_temp(); };