/*! * \brief Send RemoteReaderDiscoverCmds and maintain a list of responsive peers. * * \copyright Copyright (c) 2017-2018 Governikus GmbH & Co. KG, Germany */ #pragma once #include "RemoteClient.h" #include "DatagramHandler.h" #include "RemoteConnector.h" #include "RemoteDeviceList.h" #include #include #include #include namespace governikus { class RemoteClientImpl : public RemoteClient { Q_OBJECT private: QSharedPointer mDatagramHandler; QScopedPointer mRemoteDeviceList; QMap mErrorCounter; QThread mRemoteConnectorThread; QPointer mRemoteConnector; QVector > mRemoteConnectorPending; QStringList mConnectedDeviceIds; void bootstrapRemoteConnectorThread(); void shutdownRemoteConnectorThread(); QSharedPointer mapToAndTakeRemoteConnectorPending(const RemoteDeviceDescriptor& pRemoteDeviceDescriptor); private Q_SLOTS: void onNewMessage(const QJsonDocument& pData, const QHostAddress& pAddress); void onRemoteDispatcherCreated(const RemoteDeviceDescriptor& pRemoteDeviceDescriptor, const QSharedPointer& pAdapter); void onRemoteDispatcherError(const RemoteDeviceDescriptor& pRemoteDeviceDescriptor, RemoteErrorCode pErrorCode); void onDispatcherDestroyed(GlobalStatus::Code pCloseCode, const QSharedPointer& pRemoteDispatcher); public: RemoteClientImpl(); virtual ~RemoteClientImpl() override; Q_INVOKABLE virtual void startDetection() override; Q_INVOKABLE virtual void stopDetection() override; Q_INVOKABLE virtual bool isDetecting() override; Q_INVOKABLE virtual void establishConnection(const QSharedPointer& pEntry, const QString& pPsk) override; virtual QVector > getRemoteDevices() const override; Q_INVOKABLE virtual void requestRemoteDevices() override; virtual QVector getConnectedDeviceInfos() override; }; } /* namespace governikus */