Malloy
Toggle main menu visibility
Loading...
Searching...
No Matches
lib
malloy
core
http
session
storage_memory.hpp
1
#pragma once
2
3
#include "storage.hpp"
4
#include "session.hpp"
5
6
#include <chrono>
7
#include <unordered_map>
8
9
namespace
malloy::http::sessions
10
{
11
12
struct
session
;
13
17
class
storage_memory
:
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
}
malloy::http::sessions::storage_memory
Definition
storage_memory.hpp:19
malloy::http::sessions::storage_memory::get
std::shared_ptr< session > get(const id_type &id) override
Definition
storage_memory.hpp:85
malloy::http::sessions::storage_memory::destroy_expired
std::size_t destroy_expired(const std::chrono::seconds &max_lifetime) override
Definition
storage_memory.hpp:99
malloy::http::sessions::storage_memory::create
std::shared_ptr< session > create(id_type id) override
Definition
storage_memory.hpp:72
malloy::http::sessions::storage_memory::destroy
void destroy(id_type id) override
Definition
storage_memory.hpp:93
malloy::http::sessions::session_chrono
Definition
session.hpp:233
malloy::http::sessions::session_chrono::session_chrono
session_chrono(id_type &&id)
Definition
session.hpp:243
malloy::http::sessions::session
Definition
session.hpp:23
malloy::http::sessions::storage
Definition
storage.hpp:17
Generated by
1.18.0