cutelyst 5.0.0
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
engine.cpp
1/*
2 * SPDX-FileCopyrightText: (C) 2013-2022 Daniel Nicoletti <dantti12@gmail.com>
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5#include "application.h"
6#include "common.h"
7#include "context_p.h"
8#include "engine_p.h"
9#include "request_p.h"
10#include "response_p.h"
11
12#include <QByteArray>
13#include <QDir>
14#include <QJsonDocument>
15#include <QSettings>
16#include <QThread>
17#include <QUrl>
18
19using namespace Cutelyst;
20
42Engine::Engine(Cutelyst::Application *app, int workerCore, const QVariantMap &opts)
43 : d_ptr(new EnginePrivate)
44{
45 Q_D(Engine);
46
47 connect(
49
50 d->opts = opts;
51 d->workerCore = workerCore;
52 d->app = app;
53}
54
56{
57 delete d_ptr;
58}
59
61{
62 Q_D(const Engine);
63 Q_ASSERT(d->app);
64 return d->app;
65}
66
68{
69 Q_D(const Engine);
70 return d->workerCore;
71}
72
74{
75 Q_D(Engine);
76
77 if (thread() != QThread::currentThread()) {
78 qCCritical(CUTELYST_ENGINE) << "Cannot init application on a different thread";
79 return false;
80 }
81
82 if (!d->app->setup(this)) {
83 qCCritical(CUTELYST_ENGINE) << "Failed to setup application";
84 return false;
85 }
86
87 return true;
88}
89
91{
92 Q_D(Engine);
93
94 if (!d->app) {
95 qCCritical(CUTELYST_ENGINE) << "Failed to postForkApplication on a null application";
96 return false;
97 }
98
100
101 return d->app->enginePostFork();
102}
103
105{
106 Q_D(Engine);
107 return d->app->defaultHeaders();
108}
109
111{
112 Q_D(Engine);
113 d->app->handleRequest(request);
114}
115
116QVariantMap Engine::opts() const
117{
118 Q_D(const Engine);
119 return d->opts;
120}
121
122QVariantMap Engine::config(const QString &entity) const
123{
124 Q_D(const Engine);
125 return d->config.value(entity).toMap();
126}
127
128void Engine::setConfig(const QVariantMap &config)
129{
130 Q_D(Engine);
131 d->config = config;
132}
133
134QVariantMap Engine::loadIniConfig(const QString &filename)
135{
136 QVariantMap ret;
137 QSettings settings(filename, QSettings::IniFormat);
138 if (settings.status() != QSettings::NoError) {
139 qCWarning(CUTELYST_ENGINE) << "Failed to load INI file:" << settings.status();
140 return ret;
141 }
142
143 const auto groups = settings.childGroups();
144 for (const QString &group : groups) {
145 QVariantMap configGroup;
146 settings.beginGroup(group);
147 const auto child = settings.childKeys();
148 for (const QString &key : child) {
149 configGroup.insert(key, settings.value(key));
150 }
151 settings.endGroup();
152 ret.insert(group, configGroup);
153 }
154
155 return ret;
156}
157
158QVariantMap Engine::loadJsonConfig(const QString &filename)
159{
160 QVariantMap ret;
161 QFile file(filename);
163 return ret;
164 }
166
167 ret = doc.toVariant().toMap();
168
169 return ret;
170}
171
172#include "moc_engine.cpp"
The Cutelyst application.
Definition application.h:66
The Cutelyst Engine.
Definition engine.h:20
static QVariantMap loadJsonConfig(const QString &filename)
Definition engine.cpp:158
Engine(Application *app, int workerCore, const QVariantMap &opts)
Definition engine.cpp:42
bool initApplication()
Definition engine.cpp:73
int workerCore() const
Definition engine.cpp:67
bool postForkApplication()
Definition engine.cpp:90
void setConfig(const QVariantMap &config)
Definition engine.cpp:128
virtual ~Engine()
Definition engine.cpp:55
void processRequestAsync(Cutelyst::EngineRequest *request)
void processRequest(EngineRequest *request)
Definition engine.cpp:110
QVariantMap opts() const
Definition engine.cpp:116
QVariantMap config(const QString &entity) const
Definition engine.cpp:122
Application * app() const
Definition engine.cpp:60
Headers & defaultHeaders()
Definition engine.cpp:104
static QVariantMap loadIniConfig(const QString &filename)
Definition engine.cpp:134
Container for HTTP headers.
Definition headers.h:24
The Cutelyst namespace holds all public Cutelyst API.
bool open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags)
QByteArray readAll()
QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error)
QVariant toVariant() const const
QList::iterator insert(QList::const_iterator before, QList::parameter_type value)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
void setObjectName(QAnyStringView name)
QThread * thread() const const
void beginGroup(QAnyStringView prefix)
QStringList childGroups() const const
QStringList childKeys() const const
void endGroup()
QSettings::Status status() const const
QVariant value(QAnyStringView key) const const
QString number(double n, char format, int precision)
QueuedConnection
QThread * currentThread()
QMap< QString, QVariant > toMap() const const