#include "openaiclient.h" #include OpenAIClient::OpenAIClient(asio::io_context& io_context) : io_context_(io_context), socket_(io_context) { } bool OpenAIClient::connect(const std::string& ip, unsigned int port) { ip_ = ip; port_ = std::to_string(port); try { asio::ip::tcp::resolver resolver(io_context_); asio::ip::tcp::resolver::results_type endpoints = resolver.resolve(ip_, port_); asio::connect(socket_, endpoints); std::cout << "Connected to server " << ip_ << ":" << port_ << std::endl; return true; } catch (const std::exception& ex) { std::cerr << "Exception: " << ex.what() << "\n"; return false; } } FrameData* OpenAIClient::ask_openai(const std::string& text) { FrameData send; send.type = FrameType::TYPE_REQUEST; send.data = new char[text.size()]; send.len = text.size(); memcpy(send.data, text.c_str(), text.size()); char* send_data{}; int len{}; std::shared_ptr deleter(new int(1), [send_data](int* p) { delete p; delete[] send_data; }); if (!com_pack(&send, &send_data, len)) { std::cerr << "com_pack error" << std::endl; return nullptr; } auto send_size = socket_.write_some(asio::buffer(send_data, len)); if (send_size != len) { std::cerr << "send_size != text.size()" << std::endl; return nullptr; } size_t read_size = socket_.read_some(asio::buffer(tmp_buf_)); FrameData* ret = nullptr; while (read_size > 0) { buffer_.push(tmp_buf_.data(), read_size); auto* frame = com_parse(buffer_); if (frame) { ret = frame; return ret; } read_size = socket_.read_some(asio::buffer(tmp_buf_)); } return ret; } void OpenAIClient::disconnect() { }