#pragma once // qt incl #include <QObject> #include <QMap> #include <QHostInfo> #include <bonjour/bonjourrecord.h> 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 = 0); public: /// /// @brief Browse for a service /// bool browseForServiceType(const QString &serviceType); /// /// @brief Get all available sessions /// QMap<QString,BonjourRecord> getAllServices() { return _hyperionSessions; }; static BonjourBrowserWrapper* instance; static BonjourBrowserWrapper* getInstance(){ return instance; }; signals: /// /// @brief Emits whenever a change happend /// void browserChange(const QMap<QString,BonjourRecord>& bRegisters); private: /// map of service names and browsers QMap< QString, BonjourServiceBrowser* > _browsedServices; /// Resolver BonjourServiceResolver* _bonjourResolver; // contains all current active service sessions QMap<QString,BonjourRecord> _hyperionSessions; QString _bonjourCurrentServiceToResolve; /// timer to resolve changes QTimer* _timerBonjourResolver; private slots: /// /// @brief is called whenever a BonjourServiceBrowser emits change void currentBonjourRecordsChanged(const QList<BonjourRecord> &list); /// @brief new record resolved void bonjourRecordResolved(const QHostInfo &hostInfo, int port); /// /// @brief timer slot which updates regularly entries /// void bonjourResolve(); };