aasdk/src/TCP/TCPEndpoint.cpp

57 lines
1.5 KiB
C++
Raw Normal View History

2018-03-12 16:43:35 +01:00
#include <f1x/aasdk/TCP/TCPEndpoint.hpp>
namespace f1x
{
namespace aasdk
{
namespace tcp
{
TCPEndpoint::TCPEndpoint(ITCPWrapper& tcpWrapper, boost::asio::ip::tcp::socket socket)
: tcpWrapper_(tcpWrapper)
, socket_(std::move(socket))
{
}
void TCPEndpoint::send(common::DataConstBuffer buffer, Promise::Pointer promise)
{
tcpWrapper_.asyncWrite(socket_, std::move(buffer),
std::bind(&TCPEndpoint::asyncOperationHandler,
this->shared_from_this(),
std::placeholders::_1,
std::placeholders::_2,
std::move(promise)));
}
void TCPEndpoint::receive(common::DataBuffer buffer, Promise::Pointer promise)
{
tcpWrapper_.asyncRead(socket_, std::move(buffer),
std::bind(&TCPEndpoint::asyncOperationHandler,
this->shared_from_this(),
std::placeholders::_1,
std::placeholders::_2,
std::move(promise)));
}
void TCPEndpoint::stop()
{
2018-03-13 17:20:00 +01:00
tcpWrapper_.close(socket_);
2018-03-12 16:43:35 +01:00
}
2018-03-12 17:53:31 +01:00
void TCPEndpoint::asyncOperationHandler(const boost::system::error_code& ec, size_t, Promise::Pointer promise)
2018-03-12 16:43:35 +01:00
{
if(!ec)
{
2018-03-12 17:53:31 +01:00
promise->resolve();
2018-03-12 16:43:35 +01:00
}
else
{
promise->reject(error::Error(error::ErrorCode::TCP_TRANSFER, static_cast<uint32_t>(ec.value())));
}
}
}
}
}