15 std::string s = std::to_string(get_session_id()) +
": ";
37 void Server_Client::connect()
40 logger.
log(
"joedb::Server_Client::connect");
55 throw Exception(
"Did not receive \"joedb\" from server");
57 const int64_t server_version =
buffer.
read<int64_t>();
59 if (server_version == 0)
60 throw Exception(
"Client version rejected by server");
62 logger.
log(
"server_version = " + std::to_string(server_version));
65 throw Exception(
"Unsupported server version");
76 throw Exception(
"Unexpected server mode");
100 for (int64_t read = 0; read < size;)
102 const int64_t remaining = size - read;
103 const size_t read_size = size_t(std::min(int64_t(buffer.size), remaining));
104 const size_t n = lock->read_some(buffer.data, read_size);
105 writer.write(buffer.data, n);
107 progress_bar.
print(read);
117 std::chrono::milliseconds keep_alive_interval
119 keep_alive(*this, keep_alive_interval),
123 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
void 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