#pragma once #include #include class QUdpSocket; enum searchType{ STY_WEBSERVER, STY_FLATBUFSERVER, STY_JSONSERVER }; /// /// @brief Search for SSDP sessions, used by standalone capture binaries /// class SSDPDiscover : public QObject { Q_OBJECT public: SSDPDiscover(QObject* parent = nullptr); /// /// @brief Search for specified service, results will be returned by signal newService(). Calling this method again will reset all found usns and search again /// @param st The service to search for /// void searchForService(const QString& st = "urn:hyperion-project.org:device:basic:1"); /// /// @brief Search for specified searchTarget, the method will block until a server has been found or a timeout happend /// @param type The address type one of struct searchType /// @param st The service to search for /// @param timeout_ms The timeout in ms /// @return The address+port of webserver or empty if timed out /// const QString getFirstService(const searchType& type = STY_WEBSERVER,const QString& st = "urn:hyperion-project.org:device:basic:1", const int& timeout_ms = 3000); signals: /// /// @brief Emits whenever a new service has ben found, search started with searchForService() /// @param webServer The address+port of webserver "192.168.0.10:8090" /// void newService(const QString webServer); private slots: void readPendingDatagrams(); private: void sendSearch(const QString& st); private: Logger* _log; QUdpSocket* _udpSocket; QString _searchTarget; QStringList _usnList; };