cutelyst  5.0.1
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 
19 using namespace Cutelyst;
20 
42 Engine::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 
67 int Engine::workerCore() const
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 
116 QVariantMap Engine::opts() const
117 {
118  Q_D(const Engine);
119  return d->opts;
120 }
121 
122 QVariantMap Engine::config(const QString &entity) const
123 {
124  Q_D(const Engine);
125  return d->config.value(entity).toMap();
126 }
127 
128 void Engine::setConfig(const QVariantMap &config)
129 {
130  Q_D(Engine);
131  d->config = config;
132 }
133 
134 QVariantMap 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 
158 QVariantMap 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"
QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error)
QStringList childKeys() const const
void endGroup()
void setConfig(const QVariantMap &config)
Definition: engine.cpp:128
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
iterator insert(const_iterator before, parameter_type value)
Container for HTTP headers.
Definition: headers.h:23
void processRequest(EngineRequest *request)
Definition: engine.cpp:110
bool initApplication()
Definition: engine.cpp:73
QThread * thread() const const
QVariant value(QAnyStringView key) const const
bool postForkApplication()
Definition: engine.cpp:90
static QVariantMap loadIniConfig(const QString &filename)
Definition: engine.cpp:134
QString number(double n, char format, int precision)
Engine(Application *app, int workerCore, const QVariantMap &opts)
Definition: engine.cpp:42
QVariantMap opts() const
Definition: engine.cpp:116
virtual ~Engine()
Definition: engine.cpp:55
QVariantMap config(const QString &entity) const
Definition: engine.cpp:122
QByteArray readAll()
QStringList childGroups() const const
void processRequestAsync(Cutelyst::EngineRequest *request)
void setObjectName(QAnyStringView name)
static QVariantMap loadJsonConfig(const QString &filename)
Definition: engine.cpp:158
The Cutelyst namespace holds all public Cutelyst API.
QVariant toVariant() const const
Status status() const const
QMap< QString, QVariant > toMap() const const
Application * app() const
Definition: engine.cpp:60
QThread * currentThread()
bool open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags)
The Cutelyst application.
Definition: application.h:72
Headers & defaultHeaders()
Definition: engine.cpp:104
QueuedConnection
The Cutelyst Engine.
Definition: engine.h:19
int workerCore() const
Definition: engine.cpp:67
void beginGroup(QAnyStringView prefix)