6#include <QtCore/QTimer>
7#include <QtCore/QMutex>
8#include <QReadWriteLock>
11#include <ilog/TLoggerCompWrap.h>
12#include <imod/IModel.h>
13#include <imod/CSingleModelObserverBase.h>
16#include <imtcom/IConnectionStatusProvider.h>
17#include <imtrest/ITransport.h>
18#include <imtrest/IResponseDispatcher.h>
19#include <imtrest/IRequestServlet.h>
20#include <imtrest/IProtocolEngine.h>
21#include <imtgql/CGqlRequest.h>
22#include <imtclientgql/IGqlClient.h>
23#include <imtclientgql/IGqlSubscriptionManager.h>
30class CSubscriptionManagerComp:
32 public ilog::CLoggerComponentBase,
33 public imod::CSingleModelObserverBase,
34 virtual public IGqlSubscriptionManager,
35 virtual public imtrest::IRequestServlet,
36 virtual public IGqlClient
40 typedef ilog::CLoggerComponentBase BaseClass;
42 I_BEGIN_COMPONENT(CSubscriptionManagerComp);
43 I_REGISTER_INTERFACE(IGqlSubscriptionManager);
44 I_REGISTER_INTERFACE(IGqlClient);
45 I_REGISTER_INTERFACE(imtrest::IRequestServlet);
46 I_ASSIGN(m_subscriptionSenderCompPtr,
"SubscriptionSender",
"Subscription sender",
false,
"SubscriptionSender");
47 I_ASSIGN(m_requestManagerCompPtr,
"RequestManager",
"Response dispatcher for sending a request",
false,
"RequestManager");
48 I_ASSIGN(m_engineCompPtr,
"ProtocolEngine",
"Protocol engine for subscription",
true,
"ProtocolEngine");
49 I_ASSIGN(m_connectionStatusProviderCompPtr,
"WebLoginStatus",
"Web login status",
false,
"WebLoginStatus");
50 I_ASSIGN_TO(m_connectionStatusProviderModelCompPtr, m_connectionStatusProviderCompPtr,
true);
55 virtual bool UnregisterSubscription(
const QByteArray& subscriptionId)
override;
58 virtual void OnUpdate(
const istd::IChangeable::ChangeSet& changeSet)
override;
61 virtual bool IsCommandSupported(
const QByteArray& commandId)
const override;
62 virtual imtrest::ConstResponsePtr ProcessRequest(
const imtrest::IRequest& request,
const QByteArray& subCommandId = QByteArray())
const override;
65 virtual GqlResponsePtr SendRequest(GqlRequestPtr requestPtr,
imtbase::IUrlParam* urlParamPtr =
nullptr)
const override;
68 virtual void SubscriptionRegister(
const imtgql::CGqlRequest& subscriptionRequest,
const QByteArray& subscriptionId)
const;
69 virtual bool SendRequestInternal(
const imtgql::IGqlRequest& request, imtrest::ConstRequestPtr& requestPtr)
const;
72 virtual void OnComponentCreated()
override;
75 void OnQueryDataReceived(
int resultCode = 1)
const;
78 virtual imtrest::ConstResponsePtr CreateErrorResponse(
const QByteArray& errorMessage,
const imtrest::IRequest& request)
const;
84 I_REF(imod::IModel, m_connectionStatusProviderModelCompPtr);
87 class SubscriptionHelper
90 imtgql::CGqlRequest m_request;
91 QByteArray m_clientId;
92 IGqlSubscriptionClient::SubscriptionStatus m_status;
93 QList<IGqlSubscriptionClient*> m_clients;
96 class NetworkOperation
99 NetworkOperation() =
delete;
100 NetworkOperation(
int timeout,
const CSubscriptionManagerComp* parent);
103 QEventLoop connectionLoop;
108 mutable QMap <QByteArray, SubscriptionHelper> m_registeredClients;
109 mutable QMap<QString, QByteArray> m_queryDataMap;
110 mutable QMutex m_registeredClientsMutex;
111 mutable QReadWriteLock m_queryDataMapLock;
Interface for monitoring network connection status with observable state changes.