24 const std::chrono::time_point<std::chrono::steady_clock> start_time;
27 std::optional<Writable_Journal_Client_Lock> client_lock;
28 asio::io_context &io_context;
29 std::string endpoint_path;
30 asio::local::stream_protocol::endpoint endpoint;
31 asio::local::stream_protocol::acceptor acceptor;
33 asio::signal_set interrupt_signals;
37 struct Session:
public std::enable_shared_from_this<Session>
41 asio::local::stream_protocol::socket socket;
46 waiting_for_push_to_pull,
47 waiting_for_lock_to_pull,
48 waiting_for_lock_to_push,
54 int64_t push_remaining_size;
55 std::optional<Async_Writer> push_writer;
56 bool unlock_after_push;
58 std::optional<asio::steady_timer> pull_timer;
59 bool lock_before_pulling;
61 int64_t pull_checkpoint;
63 std::ostream &write_id(std::ostream &out)
const;
64 std::optional<Progress_Bar> progress_bar;
66 Session(
Server &server, asio::local::stream_protocol::socket &&socket);
70 typedef void (
Server::*Transfer_Handler)
72 std::shared_ptr<Session> session,
73 std::error_code error,
74 size_t bytes_transferred
79 std::shared_ptr<Session> session,
82 Transfer_Handler handler
85 std::set<Session *> sessions;
89 const std::chrono::milliseconds lock_timeout;
90 asio::steady_timer lock_timeout_timer;
92 std::queue<std::shared_ptr<Session>> lock_queue;
94 void lock(std::shared_ptr<Session> session, Session::State state);
95 void unlock(Session &session);
97 void lock_timeout_handler
99 std::shared_ptr<Session> session,
100 std::error_code error
103 void refresh_lock_timeout(std::shared_ptr<Session> session);
105 void push_transfer_handler
107 std::shared_ptr<Session> session,
108 std::error_code error,
109 size_t bytes_transferred
114 std::shared_ptr<Session> session
119 std::shared_ptr<Session> session,
120 std::error_code error,
121 size_t bytes_transferred
124 void read_transfer_handler
126 std::shared_ptr<Session> session,
128 std::error_code error,
129 size_t bytes_transferred,
133 void start_reading(std::shared_ptr<Session> session,
Async_Reader reader);
135 void start_pulling(std::shared_ptr<Session> session);
139 std::shared_ptr<Session> session,
140 std::error_code error,
141 size_t bytes_transferred
146 std::shared_ptr<Session> session,
147 std::error_code error,
148 size_t bytes_transferred
151 void check_hash_handler
153 std::shared_ptr<Session> session,
154 std::error_code error,
155 size_t bytes_transferred
158 void read_command_handler
160 std::shared_ptr<Session> session,
161 std::error_code error,
162 size_t bytes_transferred
165 void read_command(std::shared_ptr<Session> session);
167 void write_buffer_and_next_command
169 std::shared_ptr<Session> session,
173 void handshake_handler
175 std::shared_ptr<Session> session,
176 std::error_code error,
177 size_t bytes_transferred
182 std::ostream *log_pointer;
184 template<
typename F>
void log(F f)
189 log_pointer->flush();
197 asio::io_context &io_context,
198 std::string endpoint_path,
199 std::chrono::milliseconds lock_timeout,
200 std::ostream *log_pointer