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.
 
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 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.
 

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 114 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 292 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 the manager is shutting down.

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 70 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 259 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 50 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 63 of file HttpRequestManager.hpp.

◆ get_instance()

static 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 100 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 82 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 179 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 220 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 121 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 196 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 57 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 91 of file HttpRequestManager.hpp.

◆ ~HttpRequestManager()

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

Private destructor to clean up global resources.

Definition at line 297 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 113 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 112 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 110 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 111 of file HttpRequestManager.hpp.

◆ m_rate_limiter

HttpRateLimiter kurlyk::HttpRequestManager::m_rate_limiter
private

Rate limiter for controlling request frequency.

Definition at line 116 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 117 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 115 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 118 of file HttpRequestManager.hpp.


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