ImagingTools Core SDK
CWebSocketRequest.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QUrl>
7#include <QtNetwork/QHostAddress>
8
9// ACF includes
10#include <ilog/TLoggerCompWrap.h>
11
12// ImtCore includes
13#include <imtrest/IRequest.h>
14#include <imtrest/IRequestServlet.h>
15
16
17namespace imtrest
18{
19
20
21class IRequestEventHandler: public istd::IPolymorphic
22{
23public:
24 virtual void OnRequestDestroyed(IRequest* request) = 0;
25};
26
27
28class CWebSocketRequest: public QObject, virtual public IRequest
29{
30 Q_OBJECT
31public:
32 enum MethodType
33 {
34 MT_UNKNOWN = 0,
35 MT_CONNECTION_INIT,
36 MT_CONNECTION_ACK,
37 MT_KEEP_ALIVE,
38 MT_KEEP_ALIVE_ACK,
39 MT_START,
40 MT_SUBSCRIBE,
41 MT_START_ACK,
42 MT_ERROR,
43 MT_DATA,
44 MT_STOP,
45 MT_COMPLETE,
46 MT_QUERY,
47 MT_QUERY_DATA
48 };
49
50 CWebSocketRequest(const IProtocolEngine& engine);
51 CWebSocketRequest(const IRequestServlet& requestHandler, const IProtocolEngine& engine);
52 ~CWebSocketRequest();
53
54 QByteArrayList GetHeaders() const;
55 void SetHeader(const QByteArray &headerId, const QByteArray &headerData);
56 QByteArray GetHeaderValue(const QByteArray& headerType) const;
57 QUrl GetUrl() const;
58 QByteArray GetClientId() const;
59 QHostAddress GetRemoteAddress() const;
60 void SetBody(const QByteArray& body);
61 void SetRequestHandler(const IRequestServlet* requestHandlerPtr);
62 MethodType GetMethodType() const;
63 void SetMethodType(MethodType methodType);
64 QByteArray GetQueryId() const;
65 void RegisterRequestEventHandler(IRequestEventHandler* requestEventHandler);
66 void SetCommandId(const QByteArray& commandId);
67
68 // reimplemented (IRequest)
69 virtual RequestState GetState() const override;
70 virtual QByteArray GetCommandId() const override;
71 virtual CommandParams GetCommandParams() const override;
72 virtual QByteArray GetBody() const override;
73 virtual QByteArray GetRequestId() const override;
74 virtual bool ParseDeviceData(QIODevice& device) override;
75
76 // reimplemented (INetworkObject)
77 virtual const IProtocolEngine& GetProtocolEngine() const override;
78
79 // reimplemented (istd::IChangeable)
80 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS) override;
81
82private:
83 QHostAddress m_remoteAddress;
84 QUrl m_url;
85 RequestState m_state;
86 QByteArray m_body;
87 QByteArray m_clientId;
88 QByteArray m_queryId;
89 MethodType m_type;
90 QByteArray m_commandId;
91
92 const IRequestServlet* m_requestHandlerPtr;
93 const IProtocolEngine& m_engine;
94
95 typedef QMap<QByteArray, QByteArray> HeaderMap;
96 HeaderMap m_headers;
97
98 QByteArray m_lastHeader;
99 QList<IRequestEventHandler*> m_requestEventHandlers;
100 QByteArray m_requestId;
101};
102
103
104} // namespace imtrest
105
106