69 lines
2.2 KiB
C++
69 lines
2.2 KiB
C++
//-----------------------------------------------------------------------------
|
|
// ___ __ _ _
|
|
// / _ \__ _ _ __ ___ ___ / /(_)_ __ | | __
|
|
// / /_)/ _` | '__/ __|/ _ \/ / | | '_ \| |/ /
|
|
// / ___/ (_| | | \__ \ __/ /__| | | | | <
|
|
// \/ \__,_|_| |___/\___\____/_|_| |_|_|\_\ .
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// 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 <boost/asio/io_context.hpp>
|
|
#include <boost/asio/strand.hpp>
|
|
#include <parselink/server/session_manager.h>
|
|
#include <unordered_set>
|
|
|
|
namespace parselink {
|
|
|
|
class memory_session_manager {
|
|
public:
|
|
memory_session_manager(boost::asio::io_context& ctx);
|
|
~memory_session_manager();
|
|
|
|
// Allocate a new session.
|
|
tl::expected<proto::session*, proto::error> create_session(
|
|
std::string_view user_id);
|
|
|
|
// Destroy an existing session.
|
|
tl::expected<tl::monostate, proto::error> destroy_session(
|
|
proto::session* session);
|
|
|
|
// Find a session by its user id.
|
|
tl::expected<proto::session*, proto::error> find(std::string_view user_id);
|
|
|
|
// Find a session by its ID.
|
|
tl::expected<proto::session*, proto::error> find(
|
|
proto::session_id const& session);
|
|
|
|
private:
|
|
std::unordered_map<std::string, proto::session,
|
|
proto::transparent_hash<std::string>, std::equal_to<>>
|
|
sessions_;
|
|
|
|
std::unordered_map<proto::session_id, proto::session*,
|
|
proto::transparent_hash<proto::session_id>, std::equal_to<>>
|
|
lookup_by_sid_;
|
|
|
|
boost::asio::io_context& ctx_;
|
|
boost::asio::io_context::strand strand_;
|
|
};
|
|
|
|
// Sanity check
|
|
static_assert(session_manager<memory_session_manager>);
|
|
static_assert(sync_session_manager<memory_session_manager>);
|
|
static_assert(!async_session_manager<memory_session_manager>);
|
|
|
|
} // namespace parselink
|
|
|
|
#endif // memory_session_manager_b3851872babe001d
|