24 const std::chrono::time_point<std::chrono::steady_clock> start_time;
27 const bool share_client;
28 std::optional<Writable_Journal_Client_Lock> client_lock;
29 asio::io_context &io_context;
30 asio::ip::tcp::acceptor acceptor;
33 asio::signal_set interrupt_signals;
37 struct Session:
public std::enable_shared_from_this<Session>
41 asio::ip::tcp::socket socket;
46 waiting_for_push_to_pull,
47 waiting_for_lock_to_pull,
48 waiting_for_lock_to_push,
53 size_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::ip::tcp::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
144 void pull(std::shared_ptr<Session> session,
bool lock,
bool send);
148 std::shared_ptr<Session> session,
149 std::error_code error,
150 size_t bytes_transferred
153 void read_blob_handler
155 std::shared_ptr<Session> session,
156 std::error_code error,
157 size_t bytes_transferred
160 void check_hash_handler
162 std::shared_ptr<Session> session,
163 std::error_code error,
164 size_t bytes_transferred
167 void read_command_handler
169 std::shared_ptr<Session> session,
170 std::error_code error,
171 size_t bytes_transferred
174 void read_command(std::shared_ptr<Session> session);
176 void write_buffer_and_next_command
178 std::shared_ptr<Session> session,
182 void handshake_handler
184 std::shared_ptr<Session> session,
185 std::error_code error,
186 size_t bytes_transferred
191 std::error_code error,
192 asio::ip::tcp::socket socket
197 std::ostream *log_pointer;
199 template<
typename F>
void log(F f)
204 log_pointer->flush();
213 asio::io_context &io_context,
215 std::chrono::milliseconds lock_timeout,
216 std::ostream *log_pointer