6#include <QtCore/QReadWriteLock>
8#if QT_VERSION >= 0x060400
9#include <QtNetwork/QSslServer>
11#include <QtNetwork/QSslConfiguration>
14#include <imtrest/CTcpServerComp.h>
15#include <imtrest/IResponseDispatcher.h>
16#include <imtrest/CSocketThread.h>
23class CMultiThreadServer :
24#if QT_VERSION >= 0x060400
29 virtual public ilog::CLoggerBase,
30 virtual public IResponseDispatcher
34#if QT_VERSION >= 0x060400
35 typedef QSslServer BaseClass;
37 typedef QTcpServer BaseClass;
39 typedef ilog::CLoggerBase BaseClass2;
41 explicit CMultiThreadServer(CTcpServerComp* rootServer);
42 virtual ~CMultiThreadServer();
44 imtrest::IRequestServlet* GetRequestServlet();
47 [[nodiscard]]
bool IsSecureConnection()
const;
48 void EnableSecureConnection(
bool isSecureConnection =
true);
57 void SetSslConfiguration(
const QSslConfiguration& sslConfiguration);
60 virtual bool SendResponse(
const QByteArray& requestId, ConstResponsePtr& response)
const override;
61 virtual bool SendRequest(
const QByteArray& requestId, ConstRequestPtr& request)
const override;
64 void NewThreadConnection(
const IRequest* request,
const QByteArray& subCommandId);
67 void Disconnected(QByteArray requestId);
70 void ShutdownServer();
73 void AddSocketDescriptor(qintptr socketDescriptor);
74 qintptr PopSocketDescriptor();
77 virtual void incomingConnection(qintptr socketDescriptor)
override;
80 QList<QPointer<CSocketThread>> m_threadSocketList;
81 CTcpServerComp& m_rootServer;
82 mutable QList<qintptr> m_descriptorList;
83 mutable QMutex m_descriptorListMutex;
84 mutable QReadWriteLock m_threadSocketListGuard;
86 bool m_isSecureConnection;
87 QSslConfiguration m_sslConfiguration;