From 1a032caf2a7e5b5992e8d27f6a7d744b1cc30afd Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sun, 30 Jun 2019 01:07:06 +0700 Subject: [PATCH] add is_ready and is_running function for request --- headers/curly.hpp/curly.hpp | 3 +++ sources/curly.cpp | 20 +++++++++++++++++++- untests/curly_tests.cpp | 17 +++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/headers/curly.hpp/curly.hpp b/headers/curly.hpp/curly.hpp index e911ab5..ff0d99c 100644 --- a/headers/curly.hpp/curly.hpp +++ b/headers/curly.hpp/curly.hpp @@ -137,6 +137,9 @@ namespace curly_hpp statuses wait() const noexcept; statuses status() const noexcept; + bool is_ready() const noexcept; + bool is_running() const noexcept; + response get(); const std::string& error() const noexcept; private: diff --git a/sources/curly.cpp b/sources/curly.cpp index 34ffaa5..ecd864d 100644 --- a/sources/curly.cpp +++ b/sources/curly.cpp @@ -483,6 +483,16 @@ namespace curly_hpp return status_; } + bool is_ready() const noexcept { + std::lock_guard guard(mutex_); + return status_ != statuses::pending; + } + + bool is_running() const noexcept { + std::lock_guard guard(mutex_); + return status_ == statuses::pending; + } + statuses status() const noexcept { std::lock_guard guard(mutex_); return status_; @@ -630,6 +640,14 @@ namespace curly_hpp return state_->status(); } + bool request::is_ready() const noexcept { + return state_->is_ready(); + } + + bool request::is_running() const noexcept { + return state_->is_running(); + } + response request::get() { return state_->get(); } @@ -888,7 +906,7 @@ namespace curly_hpp } for ( auto iter = active_handles.begin(); iter != active_handles.end(); ) { - if ( (*iter)->status() != request::statuses::pending ) { + if ( (*iter)->is_ready() ) { curl_multi_remove_handle(curlm, (*iter)->curlh().get()); iter = active_handles.erase(iter); } else { diff --git a/untests/curly_tests.cpp b/untests/curly_tests.cpp index 764871a..6946cb3 100644 --- a/untests/curly_tests.cpp +++ b/untests/curly_tests.cpp @@ -93,6 +93,23 @@ TEST_CASE("curly") { } } + SECTION("is_ready/is_running") { + { + auto req = net::request_builder("https://httpbin.org/delay/1").send(); + REQUIRE(req.is_running()); + REQUIRE_FALSE(req.is_ready()); + REQUIRE(req.cancel()); + REQUIRE_FALSE(req.is_running()); + REQUIRE(req.is_ready()); + } + { + auto req = net::request_builder("https://httpbin.org/status/200").send(); + REQUIRE(req.wait() == net::request::statuses::done); + REQUIRE(req.is_ready()); + REQUIRE_FALSE(req.is_running()); + } + } + SECTION("get") { { auto req = net::request_builder("https://httpbin.org/status/204").send();