Joedb 10.4.6
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
joedb_multi_server.cpp
Go to the documentation of this file.
6
7#include <iostream>
8#include <list>
9#include <memory>
10#include <cmath>
11
12namespace joedb
13{
14 ////////////////////////////////////////////////////////////////////////////
16 ////////////////////////////////////////////////////////////////////////////
17 {
18 private:
19 File file;
21 Server server;
22
23 public:
25 (
26 Logger &logger,
27 int log_level,
28 const std::string &file_name,
29 std::string endpoint_path,
30 std::chrono::milliseconds timeout
31 ):
32 file(file_name, Open_Mode::shared_write),
33 client(file),
34 server
35 (
36 logger,
37 log_level,
38 1,
39 std::move(endpoint_path),
40 client,
41 timeout
42 )
43 {
44 server.start();
45 }
46
47 void join() {server.join();}
48 };
49
50 ////////////////////////////////////////////////////////////////////////////
51 static int multi_server(Arguments &arguments)
52 ////////////////////////////////////////////////////////////////////////////
53 {
54 Parsed_Logger logger(arguments);
55
56 const float timeout_seconds = arguments.get_option<float>
57 (
58 "timeout",
59 "seconds",
60 0.0f
61 );
62
63 const int log_level = arguments.get_option<int>("log_level", "level", 100);
64
65 arguments.add_parameter("<file.joedb>+");
66
67 if (arguments.get_remaining_count() == 0)
68 {
69 arguments.print_help(std::cerr);
70 return 1;
71 }
72
73 std::list<std::unique_ptr<Server_Data>> servers;
74
75 while (arguments.get_remaining_count())
76 {
77 const std::string file_name(arguments.get_next());
78 logger.get().log("creating server for: " + file_name);
79 servers.emplace_back
80 (
81 new Server_Data
82 (
83 logger.get(),
84 log_level,
85 file_name,
86 file_name + ".sock",
87 std::chrono::milliseconds(std::lround(timeout_seconds * 1000))
88 )
89 );
90 }
91
92 for (auto &server: servers)
93 server->join();
94
95 return 0;
96 }
97}
98
99/////////////////////////////////////////////////////////////////////////////
100int main(int argc, char **argv)
101/////////////////////////////////////////////////////////////////////////////
102{
103 return joedb::main_wrapper(joedb::multi_server, argc, argv);
104}
Server_Data(Logger &logger, int log_level, const std::string &file_name, std::string endpoint_path, std::chrono::milliseconds timeout)
int main()
Open_Mode
Definition Open_Mode.h:8
@ shared_write
like write_existing_or_create_new, but does not lock the file, and does not fail if locked
int main_wrapper(int(*main)(Arguments &), int argc, char **argv)
Process command-line arguments and catch exceptions from main.
JOEDB_FILE File
Definition File.h:23
Definition ids.h:50