ImagingTools Core SDK
CWebSocketThread.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/QThread>
7#include <QtCore/QMutex>
8
9// ImtCore includes
10#include <imtrest/IRequestServlet.h>
11#include <imtrest/ITransport.h>
12
13// Qt includes
14#include <QtWebSockets/QWebSocket>
15#include <QtCore/QPointer>
16
17
18namespace imtrest
19{
20
21
22class CWebSocketServerComp;
23class CWebSocketThread;
24
25
26class CWebSocket: public QObject
27{
28 Q_OBJECT
29public:
30 CWebSocket(CWebSocketThread *parent);
31
32public Q_SLOTS:
33 void OnWebSocketTextMessage(const QString& textMessage);
34
35private:
36 CWebSocketThread* m_parent;
37};
38
39
40class CWebSocketThread:
41 public QThread
42{
43 Q_OBJECT
44public:
45 enum Status
46 {
47 ST_START,
48 ST_PROCESS,
49 ST_CLOSE
50 };
51
52 explicit CWebSocketThread(imtrest::CWebSocketServerComp *parent);
53 void SetWebSocket(QWebSocket* webSocketPtr);
54 const QWebSocket* GetWebSocket() const;
55 void SetSocketStatus(Status socketStatus);
56 Status GetSocketStatus();
57 QByteArray GetRequestId();
58 // imtrest::IRequestServlet* GetRequestServlet();
59
60 [[nodiscard]] bool IsSecureConnection() const;
61 void EnableSecureConnection(bool isSecureConnection = true);
62
63 // reimplemented (QThread)
64 virtual void run() override;
65
66public Q_SLOTS:
67 void OnWebSocketTextMessage(const QString& textMessage);
68
69private Q_SLOTS:
70 void OnSocketDisconnected();
71 void OnWebSocketBinaryMessage(const QByteArray& dataMessage);
72 void OnError(QAbstractSocket::SocketError error);
73 void OnTimeout();
74 void OnAcceptError(QAbstractSocket::SocketError socketError);
75 void OnSslErrors(const QList<QSslError> &errors);
76 void OnSendTextMessage(const QByteArray& data) const;
77Q_SIGNALS:
78 void SendTextMessage(const QByteArray& data) const;
79
80private:
81 CWebSocketServerComp* m_server;
82 imtrest::IProtocolEngine* m_enginePtr;
83 mutable QMutex m_socketDescriptorMutex;
84 mutable QMutex m_statusMutex;
85 Status m_status;
86 QPointer<QWebSocket> m_socket;
87 bool m_isSecureConnection;
88
89 imtrest::IProtocolEngine* m_httpEnginePtr;
90 imtrest::IRequestServlet* m_requestServerHandlerPtr;
91 imtrest::IRequestServlet* m_requestClientHandlerPtr;
92 QByteArray m_productId;
93
94 QByteArray m_requestId;
95};
96
97
98} // namespace imtrest
99
100