#pragma once #include #include #include #include #include #include using boost::asio::ip::tcp; // TCP Client class class TCPClient { public: TCPClient(const std::string& host, int port); ~TCPClient(); bool connect(); void disconnect(); void send(const std::string& message); void send(const char* data, size_t size); void setReceiveCallback(std::function callback); void setReceiveCallback(std::function callback); private: void start_read(); void handle_read(const boost::system::error_code& error, std::size_t bytes_transferred); std::string host_; int port_; bool connected_; boost::asio::io_context io_context_; boost::asio::executor_work_guard work_; std::shared_ptr socket_; std::thread clientThread_; std::mutex socketMutex_; std::function receiveCallback_; std::function receiveCallbackBytes_; std::vector buffer_; };