Wrap all used socket functions

pull/1/head
michal.szwaj 2018-03-13 17:20:00 +01:00
parent e5e72d1eda
commit 219d8dd525
4 changed files with 18 additions and 3 deletions

View File

@ -15,11 +15,14 @@ class ITCPWrapper
{
public:
typedef std::function<void(const boost::system::error_code&, size_t)> Handler;
typedef std::function<void(const boost::system::error_code&)> ConnectHandler;
virtual ~ITCPWrapper() = default;
virtual void asyncWrite(boost::asio::ip::tcp::socket& socket, common::DataConstBuffer buffer, Handler handler) = 0;
virtual void asyncRead(boost::asio::ip::tcp::socket& socket, common::DataBuffer buffer, Handler handler) = 0;
virtual void close(boost::asio::ip::tcp::socket& socket) = 0;
virtual void asyncConnect(boost::asio::ip::tcp::socket& socket, const std::string& hostname, uint16_t port, ConnectHandler handler) = 0;
};
}

View File

@ -14,6 +14,8 @@ class TCPWrapper: public ITCPWrapper
public:
void asyncWrite(boost::asio::ip::tcp::socket& socket, common::DataConstBuffer buffer, Handler handler) override;
void asyncRead(boost::asio::ip::tcp::socket& socket, common::DataBuffer buffer, Handler handler) override;
void close(boost::asio::ip::tcp::socket& socket) override;
void asyncConnect(boost::asio::ip::tcp::socket& socket, const std::string& hostname, uint16_t port, ConnectHandler handler) override;
};
}

View File

@ -36,9 +36,7 @@ void TCPEndpoint::receive(common::DataBuffer buffer, Promise::Pointer promise)
void TCPEndpoint::stop()
{
boost::system::error_code ec;
socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
socket_.close(ec);
tcpWrapper_.close(socket_);
}
void TCPEndpoint::asyncOperationHandler(const boost::system::error_code& ec, size_t, Promise::Pointer promise)

View File

@ -18,6 +18,18 @@ void TCPWrapper::asyncRead(boost::asio::ip::tcp::socket& socket, common::DataBuf
boost::asio::async_read(socket, boost::asio::buffer(buffer.data, buffer.size), std::move(handler));
}
void TCPWrapper::close(boost::asio::ip::tcp::socket& socket)
{
boost::system::error_code ec;
socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
socket.close(ec);
}
void TCPWrapper::asyncConnect(boost::asio::ip::tcp::socket& socket, const std::string& hostname, uint16_t port, ConnectHandler handler)
{
socket.async_connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(hostname), port), std::move(handler));
}
}
}
}