#pragma once // qt incl #include #include #include #include class BonjourServiceBrowser; class BonjourServiceResolver; class QTimer; class BonjourBrowserWrapper : public QObject { Q_OBJECT private: friend class HyperionDaemon; /// /// @brief Browse for hyperion services in bonjour, constructed from HyperionDaemon /// Searching for hyperion http service by default /// BonjourBrowserWrapper(QObject * parent = nullptr); public: /// /// @brief Browse for a service /// bool browseForServiceType(const QString &serviceType); /// /// @brief Get all available sessions /// QMap getAllServices() { return _hyperionSessions; } static BonjourBrowserWrapper* instance; static BonjourBrowserWrapper *getInstance() { return instance; } signals: /// /// @brief Emits whenever a change happend /// void browserChange( const QMap &bRegisters ); private: /// map of service names and browsers QMap _browsedServices; /// Resolver BonjourServiceResolver *_bonjourResolver; // contains all current active service sessions QMap _hyperionSessions; QString _bonjourCurrentServiceToResolve; /// timer to resolve changes QTimer *_timerBonjourResolver; private slots: /// /// @brief is called whenever a BonjourServiceBrowser emits change void currentBonjourRecordsChanged( const QList &list ); /// @brief new record resolved void bonjourRecordResolved( const QHostInfo &hostInfo, int port ); /// /// @brief timer slot which updates regularly entries /// void bonjourResolve(); };