#ifndef SERVERDISCOVERY_H #define SERVERDISCOVERY_H #include #include #include #include "../../shared/networkmessage.h" class ServerDiscovery : public QObject { Q_OBJECT public: enum class ErrorType{ InvalidIpList, InvalidHash }; explicit ServerDiscovery(QObject *parent = 0); ~ServerDiscovery(); void start(const QByteArray& sessionName); void stop(); inline bool isActive(){ return _discoveryTimer.isActive(); } private: QTimer _discoveryTimer; int _hashErrorCount; int _ipErrorCount; QByteArray _nameBytes; QByteArray _salt2; QUdpSocket _discoverySocket; NetworkMessage _packet; static const int UDPBUFSIZ = 9000; static const int SALT_LEN = 18; public: signals: void serverDetected(const QString& host, const quint16 port, const QByteArray& sessionName, const QByteArray& certHash); void error(ErrorType e, int count); public slots: private slots: void doDiscovery(); void onUdpReadyRead(); }; #endif // SERVERDISCOVERY_H