summaryrefslogtreecommitdiff
path: root/src/components/transport_manager/src/websocket_server/websocket_session.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/transport_manager/src/websocket_server/websocket_session.cc')
-rw-r--r--src/components/transport_manager/src/websocket_server/websocket_session.cc43
1 files changed, 26 insertions, 17 deletions
diff --git a/src/components/transport_manager/src/websocket_server/websocket_session.cc b/src/components/transport_manager/src/websocket_server/websocket_session.cc
index ab62530963..8a05b9d9aa 100644
--- a/src/components/transport_manager/src/websocket_server/websocket_session.cc
+++ b/src/components/transport_manager/src/websocket_server/websocket_session.cc
@@ -35,17 +35,23 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace transport_manager {
namespace transport_adapter {
+SDL_CREATE_LOG_VARIABLE("WebSocketSession")
+
using namespace boost::beast::websocket;
template <>
WebSocketSession<tcp::socket&>::WebSocketSession(
boost::asio::ip::tcp::socket socket,
DataReceiveCallback data_receive,
+ DataSendDoneCallback data_send_done,
+ DataSendFailedCallback data_send_failed,
OnIOErrorCallback on_error)
: socket_(std::move(socket))
, ws_(socket_)
, strand_(ws_.get_executor())
, data_receive_(data_receive)
+ , data_send_done_(data_send_done)
+ , data_send_failed_(data_send_failed)
, on_io_error_(on_error) {
ws_.binary(true);
}
@@ -56,11 +62,15 @@ WebSocketSession<ssl::stream<tcp::socket&> >::WebSocketSession(
boost::asio::ip::tcp::socket socket,
ssl::context& ctx,
DataReceiveCallback data_receive,
+ DataSendDoneCallback data_send_done,
+ DataSendFailedCallback data_send_failed,
OnIOErrorCallback on_error)
: socket_(std::move(socket))
, ws_(socket_, ctx)
, strand_(ws_.get_executor())
, data_receive_(data_receive)
+ , data_send_done_(data_send_done)
+ , data_send_failed_(data_send_failed)
, on_io_error_(on_error) {
ws_.binary(true);
}
@@ -72,7 +82,7 @@ WebSocketSession<ExecutorType>::~WebSocketSession() {}
template <typename ExecutorType>
void WebSocketSession<ExecutorType>::AsyncAccept() {
- LOG4CXX_AUTO_TRACE(ws_logger_);
+ SDL_LOG_AUTO_TRACE();
ws_.async_accept(
boost::asio::bind_executor(strand_,
std::bind(&WebSocketSession::AsyncRead,
@@ -82,10 +92,10 @@ void WebSocketSession<ExecutorType>::AsyncAccept() {
template <typename ExecutorType>
void WebSocketSession<ExecutorType>::AsyncRead(boost::system::error_code ec) {
- LOG4CXX_AUTO_TRACE(ws_logger_);
+ SDL_LOG_AUTO_TRACE();
if (ec) {
auto str_err = "ErrorMessage: " + ec.message();
- LOG4CXX_ERROR(ws_logger_, str_err);
+ SDL_LOG_ERROR(str_err);
return;
}
@@ -98,26 +108,26 @@ void WebSocketSession<ExecutorType>::AsyncRead(boost::system::error_code ec) {
}
template <typename ExecutorType>
-TransportAdapter::Error WebSocketSession<ExecutorType>::WriteDown(
- ::protocol_handler::RawMessagePtr message) {
+void WebSocketSession<ExecutorType>::WriteDown(Message message) {
boost::system::error_code ec;
ws_.write(boost::asio::buffer(message->data(), message->data_size()), ec);
if (ec) {
- LOG4CXX_ERROR(ws_logger_, "A system error has occurred: " << ec.message());
- return TransportAdapter::FAIL;
+ SDL_LOG_ERROR("A system error has occurred: " << ec.message());
+ data_send_failed_(message);
+ on_io_error_();
+ return;
}
-
- return TransportAdapter::OK;
+ data_send_done_(message);
}
template <typename ExecutorType>
void WebSocketSession<ExecutorType>::Read(boost::system::error_code ec,
std::size_t bytes_transferred) {
- LOG4CXX_AUTO_TRACE(ws_logger_);
+ SDL_LOG_AUTO_TRACE();
boost::ignore_unused(bytes_transferred);
if (ec) {
- LOG4CXX_ERROR(ws_logger_, ec.message());
+ SDL_LOG_ERROR(ec.message());
buffer_.consume(buffer_.size());
on_io_error_();
return;
@@ -127,12 +137,11 @@ void WebSocketSession<ExecutorType>::Read(boost::system::error_code ec,
const auto data = boost::asio::buffer_cast<const uint8_t*>(
boost::beast::buffers_front(buffer_.data()));
- LOG4CXX_DEBUG(ws_logger_,
- "Msg: " << boost::beast::buffers_to_string(buffer_.data())
+ SDL_LOG_DEBUG("Msg: " << boost::beast::buffers_to_string(buffer_.data())
<< " Size: " << size;);
- ::protocol_handler::RawMessagePtr frame(
- new protocol_handler::RawMessage(0, 0, data, size, false));
+ auto frame =
+ std::make_shared<protocol_handler::RawMessage>(0, 0, data, size, false);
data_receive_(frame);
@@ -142,7 +151,7 @@ void WebSocketSession<ExecutorType>::Read(boost::system::error_code ec,
template <typename ExecutorType>
bool WebSocketSession<ExecutorType>::Shutdown() {
- LOG4CXX_AUTO_TRACE(ws_logger_);
+ SDL_LOG_AUTO_TRACE();
boost::system::error_code ec;
if (socket_.is_open()) {
socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
@@ -150,7 +159,7 @@ bool WebSocketSession<ExecutorType>::Shutdown() {
}
buffer_.consume(buffer_.size());
if (ec) {
- LOG4CXX_ERROR(ws_logger_, ec.message());
+ SDL_LOG_ERROR(ec.message());
return false;
}
return true;