11 using Error = boost::system::error_code;
14 : address_(
std::move(address)), port_(
std::move(port)), s_(ioContext_), disconnectTimer_(ioContext_),
15 connectionTimeout_(boost::posix_time::seconds(connectionTimeout_sec)) {}
19 disconnectionTimerStart();
20 boost::asio::ip::tcp::resolver r(ioContext_);
21 boost::asio::async_connect(
22 s_, r.resolve(address_, port_), [&](
const Error ec,
auto) { disconnectionTimerCancel(ec); });
27 catch(
const boost::exception&) {
33 std::vector<uint32_t> d(numWords);
34 disconnectionTimerStart();
35 boost::asio::async_read(s_, boost::asio::buffer(d), [&](
Error ec, std::size_t) { disconnectionTimerCancel(ec); });
43 disconnectionTimerStart();
44 boost::asio::async_write(s_, boost::asio::buffer(d), [&](
Error ec, std::size_t) { disconnectionTimerCancel(ec); });
53 s_.shutdown(boost::asio::ip::tcp::socket::shutdown_both);
62 void Connection::disconnectionTimerStart() {
63 disconnectTimer_.expires_from_now(connectionTimeout_);
64 disconnectTimer_.async_wait([&](
const Error& ec) {
65 if(ec == boost::asio::error::operation_aborted) {
73 void Connection::disconnectionTimerCancel(
const Error& ec) {
74 disconnectTimer_.cancel();
void close()
Closes a connection with the device.
void write(const std::vector< uint32_t > &data)
Sends a std::vector of bytes to the socket.
bool isOpen()
Get the connection state.
Connection(std::string address, std::string port, uint32_t connectionTimeout_sec)
Gets an IP address and port of the device but does not open the connection.
void open()
Opens a connection to the device.
std::vector< uint32_t > read(uint32_t numWordsToRead)
Receives uint32_t words from the socket.
Exception thrown when a runtime error has occured.
boost::system::error_code Error