diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2024-11-04 11:46:24 -0500 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2024-11-04 11:46:24 -0500 |
commit | 8375f92802d3aa7667bfc6f22f6d2a72361c9808 (patch) | |
tree | bb706d3493d1ed7043387a3cb9e6a4d1897acba4 /database.h | |
parent | 460b99583bcf6da4462f13ad75856283849904e7 (diff) | |
download | wizard-8375f92802d3aa7667bfc6f22f6d2a72361c9808.tar.gz wizard-8375f92802d3aa7667bfc6f22f6d2a72361c9808.tar.bz2 wizard-8375f92802d3aa7667bfc6f22f6d2a72361c9808.zip |
Websockets server!
Diffstat (limited to 'database.h')
-rw-r--r-- | database.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/database.h b/database.h new file mode 100644 index 0000000..d8d9b67 --- /dev/null +++ b/database.h | |||
@@ -0,0 +1,40 @@ | |||
1 | #ifndef DATABASE_H_0A27B356 | ||
2 | #define DATABASE_H_0A27B356 | ||
3 | |||
4 | #include <functional> | ||
5 | #include <map> | ||
6 | #include <mutex> | ||
7 | #include <optional> | ||
8 | #include <random> | ||
9 | #include <string> | ||
10 | #include <vector> | ||
11 | |||
12 | class database { | ||
13 | public: | ||
14 | // Feel free to throw an exception if the subscriber should be killed. | ||
15 | using subscribe_callback_type = std::function<void(const std::string&)>; | ||
16 | |||
17 | std::string create(std::mt19937& rng); | ||
18 | |||
19 | void subscribe(const std::string& token, subscribe_callback_type callback); | ||
20 | void post(const std::string& token, const std::string& msg); | ||
21 | |||
22 | void setResult(const std::string& token, const std::string& result); | ||
23 | const std::string& getResult(const std::string& token); | ||
24 | |||
25 | void mark_done(const std::string& token); | ||
26 | bool is_done(const std::string& token); | ||
27 | |||
28 | private: | ||
29 | struct request { | ||
30 | std::vector<std::optional<subscribe_callback_type>> subscribers; | ||
31 | std::string result; | ||
32 | bool done = false; | ||
33 | }; | ||
34 | |||
35 | std::mutex mutex_; | ||
36 | |||
37 | std::map<std::string, request> requests_; | ||
38 | }; | ||
39 | |||
40 | #endif /* end of include guard: DATABASE_H_0A27B356 */ | ||