//----------------------------------------------------------------------------- // ___ __ _ _ // / _ \__ _ _ __ ___ ___ / /(_)_ __ | | __ // / /_)/ _` | '__/ __|/ _ \/ / | | '_ \| |/ / // / ___/ (_| | | \__ \ __/ /__| | | | | < // \/ \__,_|_| |___/\___\____/_|_| |_|_|\_\ . // //----------------------------------------------------------------------------- // Author: Kurt Sassenrath // Module: Server // // Simple in-memory session manager. // // Copyright (c) 2023 Kurt Sassenrath. // // License TBD. //----------------------------------------------------------------------------- #ifndef memory_session_manager_b3851872babe001d #define memory_session_manager_b3851872babe001d #include #include #include #include namespace parselink { class memory_session_manager { public: memory_session_manager(boost::asio::io_context& ctx); ~memory_session_manager(); // Allocate a new session. tl::expected create_session( std::string_view user_id); // Destroy an existing session. tl::expected destroy_session( proto::session* session); // Find a session by its user id. tl::expected find(std::string_view user_id); // Find a session by its ID. tl::expected find( proto::session_id const& session); private: std::unordered_map, std::equal_to<>> sessions_; std::unordered_map, std::equal_to<>> lookup_by_sid_; boost::asio::io_context& ctx_; boost::asio::io_context::strand strand_; }; // Sanity check static_assert(session_manager); static_assert(sync_session_manager); static_assert(!async_session_manager); } // namespace parselink #endif // memory_session_manager_b3851872babe001d