ImagingTools Core SDK
CSocketThread.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#include <imtrest/CSocket.h>
13
14
15namespace imtrest
16{
17
18class CMultiThreadServer;
19
20class CSocketThread:
21 public QThread,
22 virtual public IRequestServlet,
23 virtual public ITransport
24{
25 Q_OBJECT
26public:
27 enum Status
28 {
29 ST_START,
30 ST_PROCESS,
31 ST_CLOSE
32 };
33
34 explicit CSocketThread(qintptr ID, bool secureConnection, const QSslConfiguration& sslConfiguration, CMultiThreadServer *parent);
35 void SetSocketDescriptor(qintptr socketDescriptor);
36 qintptr GetSocketDescriptor();
37 void SetSocketStatus(Status socketStatus);
38 Status GetSocketStatus();
39 QByteArray GetRequestId();
40 imtrest::IRequestServlet* GetRequestServlet();
41
42 [[nodiscard]] bool IsSecureConnection() const;
43 void EnableSecureConnection(bool isSecureConnection = true);
44
45 virtual imtrest::IRequestUniquePtr CreateRequest() const;
46
47 // reimplemented (QThread)
48 virtual void run() override;
49
50 // reimplemented (IRequestHandler)
51 virtual bool IsCommandSupported(const QByteArray& commandId) const override;
52 virtual ConstResponsePtr ProcessRequest(const IRequest& request, const QByteArray& subCommandId = QByteArray()) const override;
53
54 // reimplemented (ITransport)
55 virtual bool SendResponse(ConstResponsePtr& response) const override;
56 virtual bool SendRequest(ConstRequestPtr& request) const override;
57
58Q_SIGNALS:
59 void Error(QTcpSocket::SocketError socketerror);
60 void SocketDisconnected(QByteArray requestId);
61 void OnSendResponse(ConstResponsePtr response) const;
62 void Abort();
63
64private:
65 CMultiThreadServer* m_server;
66 qintptr m_socketDescriptor;
67 const imtrest::IProtocolEngine* m_enginePtr;
68 imtrest::IRequestServlet* m_requestHandlerPtr;
69 mutable QMutex m_socketDescriptorMutex;
70 mutable QMutex m_statusMutex;
71 Status m_status;
72 istd::TDelPtr<CSocket> m_socket;
73 bool m_isSecureConnection;
74 const QSslConfiguration& m_sslConfiguration;
75
76 mutable QByteArray m_requestId;
77};
78
79
80} // namespace imtrest
81
82