ImagingTools Core SDK
CGqlPublisherCompBase.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// ACF includes
6#include <ilog/TLoggerCompWrap.h>
7#include <iqt/ITranslationManager.h>
8
9// ImtCore includes
10#include <imtrest/CWebSocketRequest.h>
11#include <imtrest/IResponseDispatcher.h>
12#include <imtgql/IGqlRequestHandler.h>
13#include <imtgql/IGqlSubscriberController.h>
14
15
16namespace imtservergql
17{
18
19
20class CGqlPublisherCompBase:
21 public ilog::CLoggerComponentBase,
22 virtual public imtgql::IGqlSubscriberController,
23 virtual public imtrest::IRequestEventHandler
24{
25public:
26 typedef ilog::CLoggerComponentBase BaseClass;
27
28 I_BEGIN_BASE_COMPONENT(CGqlPublisherCompBase);
29 I_REGISTER_INTERFACE(imtgql::IGqlSubscriberController);
30 I_ASSIGN_MULTI_0(m_commandIdsAttrPtr, "CommandIds", "List of model-IDs for GraphQL-response", true);
31 I_ASSIGN(m_requestManagerCompPtr, "RequestManager", "Response dispatcher registered for the server", true, "RequestManager");
32 I_END_COMPONENT;
33
34 // reimplemented (imtgql::IGqlSubscriberController)
35 virtual bool IsRequestSupported(const imtgql::CGqlRequest& gqlRequest) const override;
36 virtual bool RegisterSubscription(
37 const QByteArray& subscriptionId,
38 const imtgql::CGqlRequest& gqlRequest,
39 const imtrest::IRequest& networkRequest,
40 QString& errorMessage) override;
41 virtual bool UnregisterSubscription(const QByteArray& subscriptionId) override;
42
43 // reimplemented (imtrest::IRequestEventHandler)
44 virtual void OnRequestDestroyed(imtrest::IRequest* request) override;
45
46protected:
47 virtual bool PushDataToSubscriber(const QByteArray& subscriptionId, const QByteArray& commandId, const QByteArray& data, const imtrest::IRequest& networkRequest, const bool useAwsStyle = true) const;
48 virtual bool PublishData(const QByteArray& commandId, const QByteArray& data) const;
49 virtual bool PublishDataFiltered(
50 const QByteArray& commandId,
51 const QByteArray& data,
52 std::function<bool(const imtgql::CGqlRequest&)> predicate) const;
53
54protected:
55 I_MULTIATTR(QByteArray, m_commandIdsAttrPtr);
56 I_REF(imtrest::IResponseDispatcher, m_requestManagerCompPtr);
57
58 struct RequestNetworks
59 {
60 imtgql::CGqlRequest gqlRequest;
61 QMap<QByteArray, const imtrest::IRequest*> networkRequests; // Subscription-ID -> NetworkRequest
62
63 RequestNetworks()
64 :gqlRequest(imtgql::IGqlRequest::RT_SUBSCRIPTION)
65 {
66 }
67 };
68
69 mutable QList<RequestNetworks> m_registeredSubscribers;
70 mutable QMutex m_mutex;
71};
72
73
74} // namespace imtservergql
75
76