ImagingTools Core SDK
CWorkerManagerComp.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/QMutex>
7
8// ACF includes
9#include <ilog/TLoggerCompWrap.h>
10
11// ImtCore includes
12#include <imtrest/IRequestServlet.h>
13#include <imtrest/IResponseDispatcher.h>
14#include <imtrest/CWorkerThread.h>
15
16
17namespace imtrest
18{
19
20
21class CWorkerManagerComp:
22 public QObject,
23 public ilog::CLoggerComponentBase,
24 public imtrest::IRequestServlet
25{
26 Q_OBJECT
27public:
28 typedef ilog::CLoggerComponentBase BaseClass;
29
30 I_BEGIN_COMPONENT(CWorkerManagerComp);
31 I_REGISTER_INTERFACE(IRequestServlet)
32 I_ASSIGN(m_requestHandlerCompPtr, "RequestHandler", "Request handler registered for the server", true, "RequestHandler");
33 I_ASSIGN(m_requestManagerCompPtr, "RequestManager", "Request manager registered for the server", true, "RequestManager");
34 I_ASSIGN(m_threadsLimitAttrPtr, "ThreadsLimit", "Limit of threads", true, 5);
35 I_END_COMPONENT
36
37 CWorkerManagerComp();
38
39 IRequestServletPtr CreateServlet();
40 bool SendResponse(const QByteArray& requestId, ConstResponsePtr& response);
41
42 // reimplemented (imtrest::IRequestServlet)
43 virtual bool IsCommandSupported(const QByteArray& commandId) const override;
44 virtual ConstResponsePtr ProcessRequest(const IRequest& request, const QByteArray& subCommandId = QByteArray()) const override;
45
46Q_SIGNALS:
47 void Start(const IRequest* request);
48
49protected Q_SLOTS:
50 void OnFinish(const IRequest* request, const QByteArray& subCommandId);
51 void AboutToQuit();
52
53private:
54 I_FACT(imtrest::IRequestServlet, m_requestHandlerCompPtr);
55 I_REF(imtrest::IResponseDispatcher, m_requestManagerCompPtr);
56 I_ATTR(int, m_threadsLimitAttrPtr);
57
58 mutable QList<CWorkerThread*> m_workerList;
59 mutable QList<const IRequest*> m_requestList;
60 mutable QMutex m_requestListMutex;
61};
62
63
64} // namespace imtrest
65
66