23 #ifndef QHTTPENGINE_QOBJECTHANDLER_H
24 #define QHTTPENGINE_QOBJECTHANDLER_H
26 #include <qhttpengine/handler.h>
28 #include "qhttpengine_export.h"
35 class QHTTPENGINE_EXPORT QObjectHandlerPrivate;
95 void registerMethod(
const QString &name, QObject *receiver,
const char *method,
bool readAll =
true);
103 void registerMethod(
const QString &name, QObject *receiver, PointerToMemberFunction method,
bool readAll =
true);
110 void registerMethod(
const QString &name, Functor functor,
bool readAll =
true);
117 void registerMethod(
const QString &name, QObject *receiver, Functor functor,
bool readAll =
true);
119 template <
typename Func1>
120 inline void registerMethod(
const QString &name,
121 typename QtPrivate::FunctionPointer<Func1>::Object *receiver,
123 bool readAll =
true) {
125 typedef QtPrivate::FunctionPointer<Func1> SlotType;
128 Q_STATIC_ASSERT_X(
int(SlotType::ArgumentCount) == 1,
129 "The slot must have exactly one argument.");
132 Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible<
Socket*,
typename QtPrivate::List_Select<typename SlotType::Arguments, 0>::Value>::value),
133 "The slot parameters do not match");
136 registerMethodImpl(name, receiver,
new QtPrivate::QSlotObject<Func1, typename SlotType::Arguments, void>(slot), readAll);
139 template <
typename Func1>
140 inline typename QtPrivate::QEnableIf<!QtPrivate::AreArgumentsCompatible<Func1, QObject*>::value,
void>::Type
141 registerMethod(
const QString &name, Func1 slot,
bool readAll =
true) {
142 registerMethod(name, Q_NULLPTR, slot, readAll);
145 template <
typename Func1>
146 inline typename QtPrivate::QEnableIf<!QtPrivate::FunctionPointer<Func1>::IsPointerToMemberFunction &&
147 #if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
148 !std::is_same<const char*, Func1>::value,
150 !QtPrivate::is_same<const char*, Func1>::value,
153 registerMethod(
const QString &name, QObject *context, Func1 slot,
bool readAll =
true) {
157 return registerMethod_functor(name, context, slot, &Func1::operator(), readAll);
166 virtual void process(
Socket *socket,
const QString &path);
170 template <
typename Func1,
typename Func1Operator>
171 inline void registerMethod_functor(
const QString &name, QObject *context, Func1 slot, Func1Operator,
bool readAll) {
173 typedef QtPrivate::FunctionPointer<Func1Operator> SlotType;
176 Q_STATIC_ASSERT_X(
int(SlotType::ArgumentCount) == 1,
177 "The slot must have exactly one argument.");
180 Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible<
Socket*,
typename QtPrivate::List_Select<typename SlotType::Arguments, 0>::Value>::value),
181 "The slot parameters do not match");
183 registerMethodImpl(name, context,
184 new QtPrivate::QFunctorSlotObject<Func1, 1, typename SlotType::Arguments, void>(slot),
188 void registerMethodImpl(
const QString &name, QObject *receiver, QtPrivate::QSlotObjectBase *slotObj,
bool readAll);
190 QObjectHandlerPrivate *
const d;
191 friend class QObjectHandlerPrivate;
196 #endif // QHTTPENGINE_QOBJECTHANDLER_H
Handler for invoking slots
Definition: qobjecthandler.h:76
Base class for HTTP handlers.
Definition: handler.h:77
Implementation of the HTTP protocol.
Definition: socket.h:96