RestLink 2.2.0
Powerfull Rest Client for Qt
Loading...
Searching...
No Matches
server.h
1#ifndef RESTLINK_SERVER_H
2#define RESTLINK_SERVER_H
3
4#include <RestLink/global.h>
5#include <RestLink/abstractrequesthandler.h>
6#include <RestLink/serverrequest.h>
7#include <RestLink/serverresponse.h>
8
9#include <QtCore/qobject.h>
10
11namespace RestLink {
12
13class AbstractController;
14
15class ServerPrivate;
16class RESTLINK_EXPORT Server : public QObject, public AbstractRequestHandler
17{
18 Q_OBJECT
19
20public:
23 Asynchronous
24 };
25
26 explicit Server(QObject *parent = nullptr);
27 Server(ServerType type, QObject *parent = nullptr);
28 virtual ~Server();
29
30 bool isListening() const;
31 void listen();
32 void close();
33
34 QJsonObject configuration() const;
35
36 int error() const;
37 QString errorString() const;
38
39 void registerController(AbstractController *controller);
40
41 HandlerType handlerType() const override;
42
43signals:
44 void stateChanged(bool listening);
45 void errorOccured(int error);
46
47protected:
48 Server(ServerPrivate *d, QObject *parent);
49
50 virtual bool init() = 0;
51 virtual void cleanup() = 0;
52 virtual bool maintain() = 0;
53
54 ServerResponse *sendRequest(Method method, const Request &request, const Body &body) override final;
55 virtual void processInternalRequest(const ServerRequest &request, ServerResponse *response);
56 virtual void processStandardRequest(const ServerRequest &request, ServerResponse *response);
57
58 void processUnsupportedRequest(const ServerRequest &request, ServerResponse *response);
59
60 virtual AbstractController *findController(const ServerRequest &request) const;
61 virtual void prepareController(AbstractController *controller, const ServerRequest &request, ServerResponse *response);
62
63 void setError(int code, const QString &str);
64
65 QScopedPointer<ServerPrivate> d_ptr;
66
67private:
68 void setListening(bool listening);
69
70 friend class ServerPrivate;
71 friend class ResourceHandler;
72};
73
74} // namespace RestLink
75
76#endif // RESTLINK_SERVER_H