15 std::string s = std::to_string(get_session_id()) +
": ";
28 static const std::array<char, 17> write_buffer = {
'D'};
29 lock->write(write_buffer.data(), write_buffer.size());
31 std::array<char, 9> read_buffer;
32 lock->read(read_buffer.data(), read_buffer.size());
36 void Server_Client::connect()
39 logger.
log(
"joedb::Server_Client::connect");
54 throw Exception(
"Did not receive \"joedb\" from server");
56 const int64_t server_version =
buffer.
read<int64_t>();
58 if (server_version == 0)
59 throw Exception(
"Client version rejected by server");
61 logger.
log(
"server_version = " + std::to_string(server_version));
64 throw Exception(
"Unsupported server version");
75 throw Exception(
"Unexpected server mode");
99 for (int64_t read = 0; read < size;)
101 const int64_t remaining = size - read;
102 const size_t read_size = size_t(std::min(int64_t(buffer.size), remaining));
103 const size_t n = lock->read_some(buffer.data, read_size);
104 writer.write(buffer.data, n);
106 progress_bar.
print(read);
116 std::chrono::milliseconds keep_alive_interval
118 keep_alive(*this, keep_alive_interval),
122 pullonly_server(false)
129 void Server_Client::disconnect()
145 try {disconnect();}
catch (...) {}
char data[size+extra_size]
virtual void log(beman::cstring_view message) noexcept
bool print(int64_t current)
int64_t server_checkpoint
void log(beman::cstring_view message) noexcept override
Thread_Safe< Channel & > channel
Server_Client(Channel &channel, Logger &logger=Logger::dummy_logger, std::chrono::milliseconds keep_alive_interval=std::chrono::milliseconds(0))
void download(Async_Writer &writer, Lock< Channel & > &lock, int64_t size) const
constexpr int protocol_version