// Copyright (c) 2019 Egor Tensin // This file is part of the "math-server" project. // For details, see https://github.com/egor-tensin/math-server. // Distributed under the MIT License. #pragma once #include #include #include #include #include namespace math::server { class SessionManager; class Session : public std::enable_shared_from_this { public: Session(SessionManager& mgr, boost::asio::io_context& io_context); boost::asio::ip::tcp::socket& socket(); void start(); void stop(); private: void close(); void read(); void write(const std::string&); void handle_read(const boost::system::error_code&, std::size_t); void handle_write(const boost::system::error_code&, std::size_t); std::string consume_input(std::size_t); SessionManager& m_session_mgr; boost::asio::io_context::strand m_strand; boost::asio::ip::tcp::socket m_socket; boost::asio::streambuf m_buffer; }; } // namespace math::server