cutelyst 3.9.1
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
Cutelyst::Engine Class Referenceabstract

The Cutelyst Engine. More...

Inheritance diagram for Cutelyst::Engine:

Signals

void processRequestAsync (Cutelyst::EngineRequest *request)

Public Member Functions

 Engine (Application *app, int workerCore, const QVariantMap &opts)
Applicationapp () const
 application
QVariantMap config (const QString &entity) const
 user configuration for the application
bool isZeroWorker () const
QVariantMap opts () const
void processRequest (EngineRequest *request)
void setConfig (const QVariantMap &config)
virtual quint64 time ()
int workerCore () const
 Each worker process migth have a number of worker cores (threads), a single process with two worker threads will return 0 and 1 for each of the thread respectively.
virtual int workerId () const =0
 The id is the number of the spawned engine process, a single process workerId = 0, two process 0 for the first 1 for the second.

Static Public Member Functions

static void camelCaseByteArrayHeader (QByteArray &key)
static QString camelCaseHeader (const QString &headerKey)
static const char * httpStatusMessage (quint16 status, int *len=nullptr)
static QVariantMap loadIniConfig (const QString &filename)
static QVariantMap loadJsonConfig (const QString &filename)

Protected Member Functions

HeadersdefaultHeaders ()
bool initApplication ()
 initApplication
bool postForkApplication ()
 postForkApplication

Friends

class Application
class Response

Detailed Description

This class is responsible receiving the request and sending the response. It must be reimplemented by real HTTP engines due some pure virtual methods.

The subclass must create an Engine per thread (worker core), if the Application passed to the constructor has a worker core greater than 0 it will issue a new Application instance, failing to do so a fatal error is generated (usually indicating that the Application does not have a Q_INVOKABLE constructor).

Definition at line 20 of file engine.h.

Constructor & Destructor Documentation

◆ Engine()

Engine::Engine ( Cutelyst::Application * app,
int workerCore,
const QVariantMap & opts )
explicit

Constructs an Engine object, where app is the application that might be used to create new instances if workerCore is greater than 1, opts is the options loaded by the engine subclass.

Parameters
appThe application loaded
workerCoreThe thread number
optsThe configuation options

Definition at line 41 of file engine.cpp.

References Engine(), app(), opts(), processRequest(), processRequestAsync(), and workerCore().

Referenced by Engine(), app(), config(), defaultHeaders(), initApplication(), isZeroWorker(), opts(), postForkApplication(), processRequest(), processRequestAsync(), setConfig(), and workerCore().

◆ ~Engine()

Engine::~Engine ( )
virtual

Definition at line 54 of file engine.cpp.

Member Function Documentation

◆ app()

Application * Engine::app ( ) const

Returns the application associated with this engine.

Returns
the Application object we are dealing with

Definition at line 63 of file engine.cpp.

References Engine().

Referenced by Engine().

◆ camelCaseByteArrayHeader()

void Cutelyst::Engine::camelCaseByteArrayHeader ( QByteArray & key)
inlinestatic

Convert Header key to camel case

Definition at line 127 of file engine.h.

◆ camelCaseHeader()

QString Cutelyst::Engine::camelCaseHeader ( const QString & headerKey)
inlinestatic

Returns the header key in camel case form

Definition at line 103 of file engine.h.

◆ config()

QVariantMap Engine::config ( const QString & entity) const
Parameters
entitythe entity you are interested in
Returns
the configuration settings

Definition at line 290 of file engine.cpp.

References Engine().

Referenced by Cutelyst::MemcachedSessionStore::MemcachedSessionStore(), setConfig(), Cutelyst::CSRFProtection::setup(), Cutelyst::Memcached::setup(), Cutelyst::Session::setup(), Cutelyst::StaticCompressed::setup(), and workerId().

◆ defaultHeaders()

Headers & Engine::defaultHeaders ( )
protected

This is the HTTP default response headers that each request gets

Definition at line 272 of file engine.cpp.

References Engine().

Referenced by processRequestAsync().

◆ httpStatusMessage()

const char * Engine::httpStatusMessage ( quint16 status,
int * len = nullptr )
static

Returns the HTTP status message for the given status.

Definition at line 131 of file engine.cpp.

◆ initApplication()

bool Engine::initApplication ( )
protected

This method inits the application and calls init on the engine. It must be called on the engine's thread

Returns
true if succeded

Definition at line 95 of file engine.cpp.

References Engine().

Referenced by processRequestAsync().

◆ isZeroWorker()

bool Cutelyst::Engine::isZeroWorker ( ) const
inline

Returns true if this is the Zero worker, ie if workerId() == 0 and workerCore() == 0

Note
the value returned from this function is only valid when postFork() is issued.

Definition at line 207 of file engine.h.

References Engine(), isZeroWorker(), workerCore(), and workerId().

Referenced by isZeroWorker(), and workerId().

◆ loadIniConfig()

QVariantMap Engine::loadIniConfig ( const QString & filename)
static

Returns a QVariantMap with the INI parsed from filename.

Definition at line 302 of file engine.cpp.

Referenced by workerId().

◆ loadJsonConfig()

QVariantMap Engine::loadJsonConfig ( const QString & filename)
static

Returns a QVariantMap with the JSON parsed from filename.

Definition at line 326 of file engine.cpp.

Referenced by workerId().

◆ opts()

QVariantMap Engine::opts ( ) const

Engine options

Definition at line 284 of file engine.cpp.

References Engine().

Referenced by Engine(), and workerId().

◆ postForkApplication()

bool Engine::postForkApplication ( )
protected

Subclasses must be call after the engine forks by the worker thread, if no forking is involved it must be called once the worker thread has started.

For convenience QThread::currentThread() has it's object name set with the worker core number.

Returns
true if the engine should use this process

Definition at line 112 of file engine.cpp.

References Engine().

Referenced by processRequestAsync().

◆ processRequest()

void Engine::processRequest ( EngineRequest * request)

Process the EngineRequest req, the caller must delete the context when the request is finished.

This method allows for engines to keep the Context alive while processing websocket data.

Definition at line 278 of file engine.cpp.

References Engine().

Referenced by Engine(), and workerId().

◆ processRequestAsync

void Cutelyst::Engine::processRequestAsync ( Cutelyst::EngineRequest * request)
signal

Process the EngineRequest req Async, the caller must delete the context when the request is finished.

This method allows for engines to keep the Context alive while processing websocket data.

References Engine(), defaultHeaders(), initApplication(), postForkApplication(), and processRequestAsync().

Referenced by Engine(), and processRequestAsync().

◆ setConfig()

void Engine::setConfig ( const QVariantMap & config)

Sets the configuration to be used by Application

Definition at line 296 of file engine.cpp.

References Engine(), and config().

Referenced by workerId().

◆ time()

quint64 Engine::time ( )
virtual
Returns
current micro seconds time to be used for stats, the default implementation returns QDateTime::currentMSecsSinceEpoch() * 1000, to become micro seconds, so if the engine supports a more precise value it can reimplement this method.

Definition at line 126 of file engine.cpp.

Referenced by workerId().

◆ workerCore()

int Engine::workerCore ( ) const

Returns the worker core set when constructing the engine

Returns
the worker core (thread)

Definition at line 89 of file engine.cpp.

References Engine().

Referenced by Engine(), isZeroWorker(), and workerId().

◆ workerId()

virtual int Cutelyst::Engine::workerId ( ) const
pure virtual

Reimplement this to get the workerId of the engine subclass, this is the same as processes id.

Note
the value returned from this function is only valid when postFork() is issued.
Returns
the worker id (process)

References config(), isZeroWorker(), loadIniConfig(), loadJsonConfig(), opts(), processRequest(), setConfig(), time(), and workerCore().

Referenced by isZeroWorker().

◆ Application

friend class Application
friend

Definition at line 197 of file engine.h.

◆ Response

friend class Response
friend

Definition at line 198 of file engine.h.