Malloy
Loading...
Searching...
No Matches
storage_memory.hpp
1#pragma once
2
3#include "storage.hpp"
4#include "session.hpp"
5
6#include <chrono>
7#include <unordered_map>
8
9namespace malloy::http::sessions
10{
11
12 struct session;
13
18 public storage
19 {
20 private:
24 struct record :
25 session_chrono<std::chrono::steady_clock>
26 {
27
28 explicit
29 record(id_type&& id) :
30 session_chrono(std::move(id))
31 {
32 }
33
34 bool
35 storage_set(const key_type& key, value_type value) override
36 {
37 try {
38 m_data.insert_or_assign(key, value);
39 }
40 catch (...)
41 {
42 return false;
43 }
44
45 return true;
46 }
47
48 [[nodiscard]]
49 std::optional<key_type>
50 storage_get(const key_type& key) const override
51 {
52 const auto& it = m_data.find(key);
53 if (it != std::cend(m_data))
54 return it->second;
55 return std::nullopt;
56 }
57
58 [[nodiscard]]
59 bool
60 storage_remove(const key_type& key) override
61 {
62 return m_data.erase(key) > 0;
63 }
64
65 private:
66 std::unordered_map<std::string, std::string> m_data;
67 };
68
69 public:
70 [[nodiscard]]
71 std::shared_ptr<session>
72 create(id_type id) override
73 {
74 auto ses = std::make_shared<record>(
75 std::move(id)
76 );
77
78 m_sessions.try_emplace(ses->id(), ses);
79
80 return ses;
81 }
82
83 [[nodiscard]]
84 std::shared_ptr<session>
85 get(const id_type& id) override
86 {
87 if (!m_sessions.contains(id))
88 return { };
89
90 return m_sessions.at(id);
91 }
92
93 void destroy(id_type id) override
94 {
95 m_sessions.erase(id);
96 }
97
98 std::size_t
99 destroy_expired(const std::chrono::seconds& max_lifetime) override
100 {
101 return std::erase_if(m_sessions, [&max_lifetime](const auto& item) {
102 const auto& [id, rec] = item;
103 return rec->access_time_older_than(max_lifetime);
104 });
105 }
106
107 private:
108 std::unordered_map<id_type, std::shared_ptr<record>> m_sessions;
109 };
110}
Definition: storage_memory.hpp:19
std::shared_ptr< session > get(const id_type &id) override
Definition: storage_memory.hpp:85
std::size_t destroy_expired(const std::chrono::seconds &max_lifetime) override
Definition: storage_memory.hpp:99
std::shared_ptr< session > create(id_type id) override
Definition: storage_memory.hpp:72
void destroy(id_type id) override
Definition: storage_memory.hpp:93
Definition: session.hpp:233
Definition: storage.hpp:17