use asio iostream

This commit is contained in:
Sébastien Bourdeauducq 2025-01-19 19:18:13 +08:00
parent 9415402a1e
commit 22492da21b
2 changed files with 5 additions and 18 deletions

View File

@ -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<Json::CharReader> 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();
}

View File

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