OpenTTD Source 20241224-master-gee860a5c8e
HTTPThreadSafeCallback Class Reference

Converts a HTTPCallback to a Thread-Safe variant. More...

#include <http_shared.h>

Data Structures

class  Callback
 Entries on the queue for later handling. More...
 

Public Member Functions

void OnFailure ()
 Similar to HTTPCallback::OnFailure, but thread-safe.
 
void OnReceiveData (std::unique_ptr< char[]> data, size_t length)
 Similar to HTTPCallback::OnReceiveData, but thread-safe.
 
void HandleQueue ()
 Process everything on the queue.
 
template<typename T >
void WaitTillEmptyOrCondition (T condition)
 Wait till the queue is dequeued, or a condition is met.
 
bool IsQueueEmpty ()
 Check if the queue is empty.
 
 HTTPThreadSafeCallback (HTTPCallback *callback)
 

Data Fields

std::atomic< bool > cancelled = false
 

Private Attributes

HTTPCallbackcallback
 The callback to send data back on.
 
std::mutex mutex
 Mutex to protect the queue.
 
std::vector< Callbackqueue
 Queue of data to send back.
 
std::condition_variable queue_cv
 Condition variable to wait for the queue to be empty.
 

Detailed Description

Converts a HTTPCallback to a Thread-Safe variant.

Definition at line 22 of file http_shared.h.

Constructor & Destructor Documentation

◆ HTTPThreadSafeCallback()

HTTPThreadSafeCallback::HTTPThreadSafeCallback ( HTTPCallback callback)
inline

Definition at line 100 of file http_shared.h.

◆ ~HTTPThreadSafeCallback()

HTTPThreadSafeCallback::~HTTPThreadSafeCallback ( )
inline

Definition at line 102 of file http_shared.h.

Member Function Documentation

◆ HandleQueue()

void HTTPThreadSafeCallback::HandleQueue ( )
inline

Process everything on the queue.

Should be called from the Game Thread.

Definition at line 59 of file http_shared.h.

References callback, HTTPCallback::IsCancelled(), lock, mutex, HTTPCallback::OnFailure(), HTTPCallback::OnReceiveData(), queue, and queue_cv.

◆ IsQueueEmpty()

bool HTTPThreadSafeCallback::IsQueueEmpty ( )
inline

Check if the queue is empty.

Definition at line 94 of file http_shared.h.

References lock, mutex, and queue.

Referenced by NetworkHTTPRequest::Receive().

◆ OnFailure()

void HTTPThreadSafeCallback::OnFailure ( )
inline

Similar to HTTPCallback::OnFailure, but thread-safe.

Definition at line 39 of file http_shared.h.

References lock, mutex, and queue.

Referenced by NetworkHTTPRequest::Connect(), NetworkHTTPRequest::Receive(), and NetworkHTTPRequest::WinHttpCallback().

◆ OnReceiveData()

void HTTPThreadSafeCallback::OnReceiveData ( std::unique_ptr< char[]>  data,
size_t  length 
)
inline

Similar to HTTPCallback::OnReceiveData, but thread-safe.

Definition at line 48 of file http_shared.h.

References lock, mutex, and queue.

Referenced by NetworkHTTPRequest::WinHttpCallback().

◆ WaitTillEmptyOrCondition()

template<typename T >
void HTTPThreadSafeCallback::WaitTillEmptyOrCondition ( condition)
inline

Wait till the queue is dequeued, or a condition is met.

Parameters
conditionCondition functor.

Definition at line 82 of file http_shared.h.

References lock, mutex, queue, and queue_cv.

Field Documentation

◆ callback

HTTPCallback* HTTPThreadSafeCallback::callback
private

The callback to send data back on.

Definition at line 114 of file http_shared.h.

Referenced by HandleQueue().

◆ cancelled

std::atomic<bool> HTTPThreadSafeCallback::cancelled = false

Definition at line 111 of file http_shared.h.

◆ mutex

std::mutex HTTPThreadSafeCallback::mutex
private

Mutex to protect the queue.

Definition at line 115 of file http_shared.h.

Referenced by HandleQueue(), IsQueueEmpty(), OnFailure(), OnReceiveData(), and WaitTillEmptyOrCondition().

◆ queue

std::vector<Callback> HTTPThreadSafeCallback::queue
private

Queue of data to send back.

Definition at line 116 of file http_shared.h.

Referenced by HandleQueue(), IsQueueEmpty(), OnFailure(), OnReceiveData(), and WaitTillEmptyOrCondition().

◆ queue_cv

std::condition_variable HTTPThreadSafeCallback::queue_cv
private

Condition variable to wait for the queue to be empty.

Definition at line 117 of file http_shared.h.

Referenced by HandleQueue(), and WaitTillEmptyOrCondition().


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