ImagingTools Core SDK
CWebSocketServletComp.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// ImtCore includes
6#include <imtrest/CHttpRootServletComp.h>
7#include <imtrest/IResponseDispatcher.h>
8#include <imtgql/IGqlSubscriberController.h>
9#include <imtgql/IGqlRequestHandler.h>
10
11
12namespace imtservergql
13{
14
15
16class CWebSocketServletComp:
17 public ilog::CLoggerComponentBase,
18 virtual public imtrest::IRequestServlet,
19 virtual public imtrest::IResponseDispatcher
20{
21public:
22 typedef ilog::CLoggerComponentBase BaseClass;
23
24 I_BEGIN_COMPONENT(CWebSocketServletComp);
25 I_REGISTER_INTERFACE(IRequestServlet);
26 I_ASSIGN_MULTI_0(m_gqlSubscriberControllersCompPtr, "GqlSubscriberControllers", "List of gql subscriber controller for corresponding command-IDs", false);
27 I_ASSIGN(m_workerManagerCompPtr, "WorkerManager", "GraphQl multithread worker manager", false, "WorkerManager");
28 I_END_COMPONENT
29
30 // reimplemented (imtrest::IRequestServlet)
31 virtual bool IsCommandSupported(const QByteArray& commandId) const override;
32 virtual imtrest::ConstResponsePtr ProcessRequest(const imtrest::IRequest& request, const QByteArray& subCommandId = QByteArray()) const override;
33
34 // reimplemented (imtrest::IResponseDispatcher)
35 virtual bool SendResponse(const QByteArray& requestId, imtrest::ConstResponsePtr& response) const override;
36 virtual bool SendRequest(const QByteArray& requestId, imtrest::ConstRequestPtr& request) const override;
37
38protected:
39 virtual imtrest::ConstResponsePtr InitConnection(const imtrest::IRequest& request) const;
40 virtual imtrest::ConstResponsePtr KeepAliveAcknowledge(const imtrest::IRequest& request) const;
41 virtual imtrest::ConstResponsePtr ProcessGqlRequest(const imtrest::IRequest& request) const;
42 virtual imtrest::ConstResponsePtr RegisterSubscription(const imtrest::IRequest& request) const;
43 virtual imtrest::ConstResponsePtr UnregisterSubscription(const imtrest::IRequest& request) const;
44 virtual imtrest::ConstResponsePtr CreateDataResponse(const QByteArray& data, const imtrest::IRequest& request) const;
45 virtual imtrest::ConstResponsePtr CreateErrorResponse(const QByteArray& errorMessage, const imtrest::IRequest& request) const;
46
47private:
48 I_MULTIREF(imtgql::IGqlSubscriberController, m_gqlSubscriberControllersCompPtr);
49 I_REF(imtrest::IRequestServlet, m_workerManagerCompPtr);
50
51 typedef QMap<QByteArray, imtgql::IGqlSubscriberController*> SubscriberControllersMap;
52
53 SubscriberControllersMap m_subscriberControllersMap;
54 mutable QMutex m_subscriberControllersMapMutex;
55};
56
57
58} // namespace imtservergql
59
60