6#include <condition_variable>
28 return {.Ok =
true, .StatusCode =
static_cast<long>(
response.status_code), .Body = std::move(
response.text)};
36 const cpr::Timeout
timeout{std::chrono::milliseconds{
request.TimeoutMs}};
53 return {.Error =
"unsupported HTTP method"};
66 std::condition_variable
Wake;
75 while (std::optional<WaitingRequest>
next =
Take())
93 std::optional<WaitingRequest>
Take()
123 Log::Warn(
"http: dropped a request to '{}' because the client is stopped.",
request.Url);
164void HttpClient::RunCompletions()
166 _requests->Completions.RunAll();
Callbacks worker threads hand to the game thread: Push from any thread, RunAll on the game thread.
void Push(std::move_only_function< void()> completion)
void Send(HttpRequest request, HttpCompletion onComplete)
HttpClient(Scheduler &scheduler)
One-shot delays and repeating timers, run on the game thread.
void Warn(std::format_string< Args... > fmt, Args &&... args)
static HttpResult Perform(const HttpRequest &request, const std::atomic_bool &stopped)
static std::string ReadFile(const std::filesystem::path &path)
static HttpResult ToResult(cpr::Response &&response)
std::function< void(const HttpResult &)> HttpCompletion
static constexpr size_t MaxWaiting
static constexpr size_t MaxWorkers
std::vector< std::thread > Workers
std::deque< WaitingRequest > Waiting
GameThreadQueue Completions
std::condition_variable Wake
void Complete(HttpCompletion onComplete, HttpResult result)
std::optional< WaitingRequest > Take()
HttpCompletion OnComplete