From e8c1ace23610c0e3371be44a5f82782ae875bca0 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Tue, 20 Sep 2022 17:10:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=81=D0=BE=D0=B5=D0=B4=D0=B8=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson_04/connection/connection.cpp | 14 ++++++++++++-- lesson_04/server/tcp_server.cpp | 5 +++-- lesson_04/server/tcp_server.hpp | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lesson_04/connection/connection.cpp b/lesson_04/connection/connection.cpp index defabb3..f2c1a59 100644 --- a/lesson_04/connection/connection.cpp +++ b/lesson_04/connection/connection.cpp @@ -27,10 +27,20 @@ namespace azh [strongThis](const boost::system::error_code &error, size_t bytesTransferred) { if (error) - std::cerr << "Failed to send message!" << std::endl; + std::cerr << "Failed to send message!" << std::endl; else - std::cout << "Sent " << bytesTransferred << " bytes" << std::endl; + std::cout << "Sent " << bytesTransferred << " bytes" << std::endl; }); + + boost::asio::streambuf buffer; + + _socket.async_receive(buffer.prepare(512), [this](const boost::system::error_code &error, size_t bytesTransferred) + { + if (error == boost::asio::error::eof) + std::cout << "Client disconnected properly!" << std::endl; + else if (error) + std::cerr << "Client disconnected in bad way!" << std::endl; + }); } Connection::pointer Connection::create(boost::asio::io_context &ioContext) diff --git a/lesson_04/server/tcp_server.cpp b/lesson_04/server/tcp_server.cpp index 850fc2a..0b26b9a 100644 --- a/lesson_04/server/tcp_server.cpp +++ b/lesson_04/server/tcp_server.cpp @@ -41,12 +41,13 @@ namespace azh void TCPServer::startAccept() { auto connection = Connection::create(_ioContext); + + _connections.push_back(connection); + _acceptor.async_accept(connection->socket(), [connection, this](const boost::system::error_code &error) { if (!error) - { connection->start(); - } startAccept(); }); diff --git a/lesson_04/server/tcp_server.hpp b/lesson_04/server/tcp_server.hpp index c5f34d8..aa400a1 100644 --- a/lesson_04/server/tcp_server.hpp +++ b/lesson_04/server/tcp_server.hpp @@ -8,6 +8,8 @@ #pragma once #include +#include +#include namespace azh { @@ -27,6 +29,7 @@ namespace azh int _port; boost::asio::io_context _ioContext; boost::asio::ip::tcp::acceptor _acceptor; + std::vector _connections; private: void startAccept(); };