diff --git a/src/listener.h b/src/listener.h index 3e10a0a..9f486c4 100644 --- a/src/listener.h +++ b/src/listener.h @@ -66,6 +66,9 @@ class Listener : public std::enable_shared_from_this> } void AsyncRunSession(tcp::socket&& socket) - {} + { + std::make_shared>(std::move(socket), + request_handler_)->Run(); + } }; } // namespace http_server \ No newline at end of file diff --git a/src/session.h b/src/session.h index b7eb85a..d517ee6 100644 --- a/src/session.h +++ b/src/session.h @@ -20,9 +20,16 @@ namespace http = beast::http; template class Session : public SessionBase, public std::enable_shared_from_this> { RequestHandler request_handler_; + + public: template Session(tcp::socket&& socket, Handler&& request_handler) : SessionBase(std::move(socket)), request_handler_(request_handler) {} + + std::shared_ptr GetSharedThis() override + { + return this->shared_from_this(); + } }; } // namespace http_server \ No newline at end of file diff --git a/src/session_base.cpp b/src/session_base.cpp index b0cd9f2..d913530 100644 --- a/src/session_base.cpp +++ b/src/session_base.cpp @@ -13,5 +13,13 @@ SessionBase::SessionBase(tcp::socket&& socket) : stream_(std::move(socket)) { +} +void SessionBase::Run() +{ + +} +void SessionBase::Read() +{ + } } // namespace http_server diff --git a/src/session_base.h b/src/session_base.h index 0b711e7..9e53cfe 100644 --- a/src/session_base.h +++ b/src/session_base.h @@ -32,6 +32,11 @@ class SessionBase { SessionBase(const SessionBase&) = delete; SessionBase& operator =(const SessionBase&) = delete; + void Run(); + void Read(); + + virtual std::shared_ptr GetSharedThis() = 0; + protected: explicit SessionBase(tcp::socket&& socket);