Kurlyk
Loading...
Searching...
No Matches
kurlyk::HttpRequestManager Class Referencefinal

Manages and processes HTTP requests using a singleton pattern. More...

#include <HttpRequestManager.hpp>

Inheritance diagram for kurlyk::HttpRequestManager:
kurlyk::core::INetworkTaskManager

Public Member Functions

const bool add_request (std::unique_ptr< HttpRequest > request_ptr, HttpResponseCallback callback)
 Adds a new HTTP request to the manager.
SubmitResult submit_request (std::unique_ptr< HttpRequest > request_ptr, HttpResponseCallback callback)
 Attempts to enqueue a new HTTP request and reports the admission result.
const long create_rate_limit (long requests_per_period, long period_ms)
 Creates a rate limit with specified parameters.
bool remove_limit (long limit_id)
 Removes an existing rate limit with the specified identifier.
uint64_t generate_request_id ()
 Generates a new unique request ID.
void set_max_pending_requests (std::size_t max_pending_requests)
 Sets the maximum number of pending requests accepted into the global queue.
std::size_t max_pending_requests () const
 Returns the current maximum pending request count.
void cancel_request_by_id (uint64_t request_id, std::function< void()> callback)
 Cancels a request by its unique identifier.
void process () override
 Processes all requests in the manager.
void shutdown () override
 Shuts down the request manager, clearing all active and pending requests.
const bool is_loaded () const override
 Checks if there are active, pending, or failed requests.
Public Member Functions inherited from kurlyk::core::INetworkTaskManager
virtual ~INetworkTaskManager ()=default

Static Public Member Functions

static HttpRequestManagerget_instance ()
 Get the singleton instance of HttpRequestManager.

Private Types

using callback_list_t = std::list<std::function<void()>>

Private Member Functions

void process_pending_requests ()
 Processes all pending requests, moving valid requests to active batches or marking them as failed.
void process_active_requests ()
 Processes active requests, moving failed ones to the failed requests list for retrying.
void process_retry_failed_requests ()
 Attempts to retry failed requests if their retry delay has passed.
void process_cancel_requests ()
 Processes and cancels HTTP requests based on their IDs.
void cleanup_pending_requests ()
 Cleans up pending requests, marking each as failed and invoking its callback.
 HttpRequestManager ()
 Private constructor to initialize global resources (e.g., cURL).
virtual ~HttpRequestManager ()
 Private destructor to clean up global resources.
 HttpRequestManager (const HttpRequestManager &)=delete
 Deleted copy constructor to enforce the singleton pattern.
HttpRequestManageroperator= (const HttpRequestManager &)=delete
 Deleted copy assignment operator to enforce the singleton pattern.

Private Attributes

std::mutex m_mutex
 Mutex to protect access to the pending requests list and requests-to-cancel map.
std::list< std::unique_ptr< HttpRequestContext > > m_pending_requests
 List of pending HTTP requests awaiting processing.
std::list< std::unique_ptr< HttpRequestContext > > m_failed_requests
 List of failed HTTP requests for retrying.
std::list< std::unique_ptr< HttpBatchRequestHandler > > m_active_request_batches
 List of currently active HTTP request batches.
std::unordered_map< uint64_t, callback_list_tm_requests_to_cancel
 Map of request IDs to their associated cancellation callbacks.
HttpRateLimiter m_rate_limiter
 Rate limiter for controlling request frequency.
std::atomic< uint64_t > m_request_id_counter = ATOMIC_VAR_INIT(1)
 Atomic counter for unique request IDs.
std::atomic< bool > m_shutdown = ATOMIC_VAR_INIT(false)
 Flag indicating if shutdown has been requested.
std::atomic< std::size_t > m_max_pending_requests = ATOMIC_VAR_INIT(0)
 Maximum number of requests accepted into the pending queue, or zero if unbounded.

Detailed Description

Manages and processes HTTP requests using a singleton pattern.

Definition at line 18 of file HttpRequestManager.hpp.

Member Typedef Documentation

◆ callback_list_t

using kurlyk::HttpRequestManager::callback_list_t = std::list<std::function<void()>>
private

Definition at line 144 of file HttpRequestManager.hpp.

Constructor & Destructor Documentation

◆ HttpRequestManager() [1/2]

kurlyk::HttpRequestManager::HttpRequestManager ( )
inlineprivate

Private constructor to initialize global resources (e.g., cURL).

Definition at line 323 of file HttpRequestManager.hpp.

◆ HttpRequestManager() [2/2]

kurlyk::HttpRequestManager::HttpRequestManager ( const HttpRequestManager & )
privatedelete

Deleted copy constructor to enforce the singleton pattern.

Member Function Documentation

◆ add_request()

const bool kurlyk::HttpRequestManager::add_request ( std::unique_ptr< HttpRequest > request_ptr,
HttpResponseCallback callback )
inline

Adds a new HTTP request to the manager.

Parameters
request_ptrUnique pointer to the HTTP request object containing request details.
callbackCallback function invoked when the request completes.
Returns
True if the request was successfully added, false if admission was rejected.

Definition at line 32 of file HttpRequestManager.hpp.

◆ cancel_request_by_id()

void kurlyk::HttpRequestManager::cancel_request_by_id ( uint64_t request_id,
std::function< void()> callback )
inline

Cancels a request by its unique identifier.

Parameters
request_idThe unique identifier of the request to cancel.
callbackAn optional callback function to execute after cancellation.

Definition at line 100 of file HttpRequestManager.hpp.

◆ cleanup_pending_requests()

void kurlyk::HttpRequestManager::cleanup_pending_requests ( )
inlineprivate

Cleans up pending requests, marking each as failed and invoking its callback.

Definition at line 290 of file HttpRequestManager.hpp.

◆ create_rate_limit()

const long kurlyk::HttpRequestManager::create_rate_limit ( long requests_per_period,
long period_ms )
inline

Creates a rate limit with specified parameters.

Parameters
requests_per_periodMaximum number of requests allowed in the specified period.
period_msTime period in milliseconds during which the rate limit applies.
Returns
A unique identifier for the created rate limit.

Definition at line 68 of file HttpRequestManager.hpp.

◆ generate_request_id()

uint64_t kurlyk::HttpRequestManager::generate_request_id ( )
inline

Generates a new unique request ID.

Returns
A new unique request ID.

Definition at line 81 of file HttpRequestManager.hpp.

◆ get_instance()

HttpRequestManager & kurlyk::HttpRequestManager::get_instance ( )
inlinestatic

Get the singleton instance of HttpRequestManager.

Returns
Reference to the singleton instance.

Definition at line 23 of file HttpRequestManager.hpp.

◆ is_loaded()

const bool kurlyk::HttpRequestManager::is_loaded ( ) const
inlineoverridevirtual

Checks if there are active, pending, or failed requests.

Returns
True if there are requests still being managed, otherwise false.

Implements kurlyk::core::INetworkTaskManager.

Definition at line 130 of file HttpRequestManager.hpp.

◆ max_pending_requests()

std::size_t kurlyk::HttpRequestManager::max_pending_requests ( ) const
inline

Returns the current maximum pending request count.

Returns
Configured queue limit, or 0 if the queue is unbounded.

Definition at line 93 of file HttpRequestManager.hpp.

◆ operator=()

HttpRequestManager & kurlyk::HttpRequestManager::operator= ( const HttpRequestManager & )
privatedelete

Deleted copy assignment operator to enforce the singleton pattern.

◆ process()

void kurlyk::HttpRequestManager::process ( )
inlineoverridevirtual

Processes all requests in the manager.

Executes pending, active, and retry-eligible failed requests.

Implements kurlyk::core::INetworkTaskManager.

Definition at line 112 of file HttpRequestManager.hpp.

◆ process_active_requests()

void kurlyk::HttpRequestManager::process_active_requests ( )
inlineprivate

Processes active requests, moving failed ones to the failed requests list for retrying.

Definition at line 210 of file HttpRequestManager.hpp.

◆ process_cancel_requests()

void kurlyk::HttpRequestManager::process_cancel_requests ( )
inlineprivate

Processes and cancels HTTP requests based on their IDs.

Definition at line 251 of file HttpRequestManager.hpp.

◆ process_pending_requests()

void kurlyk::HttpRequestManager::process_pending_requests ( )
inlineprivate

Processes all pending requests, moving valid requests to active batches or marking them as failed.

Definition at line 152 of file HttpRequestManager.hpp.

◆ process_retry_failed_requests()

void kurlyk::HttpRequestManager::process_retry_failed_requests ( )
inlineprivate

Attempts to retry failed requests if their retry delay has passed.

Definition at line 227 of file HttpRequestManager.hpp.

◆ remove_limit()

bool kurlyk::HttpRequestManager::remove_limit ( long limit_id)
inline

Removes an existing rate limit with the specified identifier.

Parameters
limit_idThe unique identifier of the rate limit to be removed.
Returns
True if the rate limit was successfully removed, or false if the rate limit ID was not found.

Definition at line 75 of file HttpRequestManager.hpp.

◆ set_max_pending_requests()

void kurlyk::HttpRequestManager::set_max_pending_requests ( std::size_t max_pending_requests)
inline

Sets the maximum number of pending requests accepted into the global queue.

Parameters
max_pending_requestsQueue limit, or 0 to keep the queue unbounded.

Definition at line 87 of file HttpRequestManager.hpp.

◆ shutdown()

void kurlyk::HttpRequestManager::shutdown ( )
inlineoverridevirtual

Shuts down the request manager, clearing all active and pending requests.

Stops request processing and releases all resources tied to active and pending requests.

Implements kurlyk::core::INetworkTaskManager.

Definition at line 121 of file HttpRequestManager.hpp.

◆ submit_request()

SubmitResult kurlyk::HttpRequestManager::submit_request ( std::unique_ptr< HttpRequest > request_ptr,
HttpResponseCallback callback )
inline

Attempts to enqueue a new HTTP request and reports the admission result.

Parameters
request_ptrUnique pointer to the HTTP request object containing request details.
callbackCallback function invoked when the request completes.
Returns
SubmitResult describing whether the request was accepted into the pending queue.

Definition at line 42 of file HttpRequestManager.hpp.

◆ ~HttpRequestManager()

virtual kurlyk::HttpRequestManager::~HttpRequestManager ( )
inlineprivatevirtual

Private destructor to clean up global resources.

Definition at line 328 of file HttpRequestManager.hpp.

Member Data Documentation

◆ m_active_request_batches

std::list<std::unique_ptr<HttpBatchRequestHandler> > kurlyk::HttpRequestManager::m_active_request_batches
private

List of currently active HTTP request batches.

Definition at line 143 of file HttpRequestManager.hpp.

◆ m_failed_requests

std::list<std::unique_ptr<HttpRequestContext> > kurlyk::HttpRequestManager::m_failed_requests
private

List of failed HTTP requests for retrying.

Definition at line 142 of file HttpRequestManager.hpp.

◆ m_max_pending_requests

std::atomic<std::size_t> kurlyk::HttpRequestManager::m_max_pending_requests = ATOMIC_VAR_INIT(0)
private

Maximum number of requests accepted into the pending queue, or zero if unbounded.

Definition at line 149 of file HttpRequestManager.hpp.

◆ m_mutex

std::mutex kurlyk::HttpRequestManager::m_mutex
mutableprivate

Mutex to protect access to the pending requests list and requests-to-cancel map.

Definition at line 140 of file HttpRequestManager.hpp.

◆ m_pending_requests

std::list<std::unique_ptr<HttpRequestContext> > kurlyk::HttpRequestManager::m_pending_requests
private

List of pending HTTP requests awaiting processing.

Definition at line 141 of file HttpRequestManager.hpp.

◆ m_rate_limiter

HttpRateLimiter kurlyk::HttpRequestManager::m_rate_limiter
private

Rate limiter for controlling request frequency.

Definition at line 146 of file HttpRequestManager.hpp.

◆ m_request_id_counter

std::atomic<uint64_t> kurlyk::HttpRequestManager::m_request_id_counter = ATOMIC_VAR_INIT(1)
private

Atomic counter for unique request IDs.

Definition at line 147 of file HttpRequestManager.hpp.

◆ m_requests_to_cancel

std::unordered_map<uint64_t, callback_list_t> kurlyk::HttpRequestManager::m_requests_to_cancel
private

Map of request IDs to their associated cancellation callbacks.

Definition at line 145 of file HttpRequestManager.hpp.

◆ m_shutdown

std::atomic<bool> kurlyk::HttpRequestManager::m_shutdown = ATOMIC_VAR_INIT(false)
private

Flag indicating if shutdown has been requested.

Definition at line 148 of file HttpRequestManager.hpp.


The documentation for this class was generated from the following file: