25 const std::chrono::time_point<std::chrono::steady_clock> start_time;
28 std::optional<Writable_Journal_Client_Lock> client_lock;
29 asio::io_context &io_context;
30 std::string endpoint_path;
31 asio::local::stream_protocol::endpoint endpoint;
32 asio::local::stream_protocol::acceptor acceptor;
34 asio::signal_set interrupt_signals;
38 struct Session:
public std::enable_shared_from_this<Session>
42 asio::local::stream_protocol::socket socket;
47 waiting_for_push_to_pull,
48 waiting_for_lock_to_pull,
49 waiting_for_lock_to_push,
55 int64_t push_remaining_size;
56 std::optional<Async_Writer> push_writer;
57 bool unlock_after_push;
59 std::optional<asio::steady_timer> pull_timer;
60 bool lock_before_pulling;
62 int64_t pull_checkpoint;
64 std::ostream &write_id(std::ostream &out)
const;
65 std::optional<Progress_Bar> progress_bar;
67 Session(
Server &server, asio::local::stream_protocol::socket &&socket);
71 typedef void (
Server::*Transfer_Handler)
73 std::shared_ptr<Session> session,
74 std::error_code error,
75 size_t bytes_transferred
80 std::shared_ptr<Session> session,
83 Transfer_Handler handler
86 std::set<Session *> sessions;
90 const std::chrono::milliseconds lock_timeout;
91 asio::steady_timer lock_timeout_timer;
93 std::queue<std::shared_ptr<Session>> lock_queue;
95 void lock(std::shared_ptr<Session> session, Session::State state);
96 void unlock(Session &session);
98 void lock_timeout_handler
100 std::shared_ptr<Session> session,
101 std::error_code error
104 void refresh_lock_timeout(std::shared_ptr<Session> session);
106 void push_transfer_handler
108 std::shared_ptr<Session> session,
109 std::error_code error,
110 size_t bytes_transferred
115 std::shared_ptr<Session> session
120 std::shared_ptr<Session> session,
121 std::error_code error,
122 size_t bytes_transferred
125 void read_transfer_handler
127 std::shared_ptr<Session> session,
129 std::error_code error,
130 size_t bytes_transferred,
134 void start_reading(std::shared_ptr<Session> session,
Async_Reader reader);
136 void start_pulling(std::shared_ptr<Session> session);
140 std::shared_ptr<Session> session,
141 std::error_code error,
142 size_t bytes_transferred
147 std::shared_ptr<Session> session,
148 std::error_code error,
149 size_t bytes_transferred
152 void check_hash_handler
154 std::shared_ptr<Session> session,
155 std::error_code error,
156 size_t bytes_transferred
159 void read_command_handler
161 std::shared_ptr<Session> session,
162 std::error_code error,
163 size_t bytes_transferred
166 void read_command(std::shared_ptr<Session> session);
168 void write_buffer_and_next_command
170 std::shared_ptr<Session> session,
174 void handshake_handler
176 std::shared_ptr<Session> session,
177 std::error_code error,
178 size_t bytes_transferred
183 std::ostream *log_pointer;
185 static const std::map<char, const char *> request_description;
187 template<
typename F>
void log(F f)
192 log_pointer->flush();
200 asio::io_context &io_context,
201 std::string endpoint_path,
202 std::chrono::milliseconds lock_timeout,
203 std::ostream *log_pointer