Client::ClientOutcome Client::AttemptRequest()

in sdk/src/client/Client.cc [51:70]


Client::ClientOutcome Client::AttemptRequest(const std::string & endpoint, const ServiceRequest & request, Http::Method method) const
{
    for (int retry =0; ;retry++) {
        auto outcome = AttemptOnceRequest(endpoint, request, method);
        if (outcome.isSuccess()) {
            return outcome;
        }
        else if (!httpClient_->isEnable()) {
            return outcome;
        }
        else {
            RetryStrategy *retryStrategy = configuration().retryStrategy.get();
            if (retryStrategy == nullptr || !retryStrategy->shouldRetry(outcome.error(), retry)) {
                return outcome;
            }
            long sleepTmeMs = retryStrategy->calcDelayTimeMs(outcome.error(), retry);
            httpClient_->waitForRetry(sleepTmeMs);
        }
    }
}