diff --git a/src/simplecasttcpservice.cpp b/src/simplecasttcpservice.cpp index 1de36d2..7cf949c 100644 --- a/src/simplecasttcpservice.cpp +++ b/src/simplecasttcpservice.cpp @@ -76,8 +76,9 @@ signals: void error(QTcpSocket::SocketError socketError); }; -SimpleCastTcpService::SimpleCastTcpService(MiniMediaPlayer *player,QObject *parent) : QTcpServer(parent),player(player) +SimpleCastTcpService::SimpleCastTcpService(MiniMediaPlayer *player,QObject *parent) : QTcpServer(parent),player(player),manager(new QNetworkAccessManager(this)) { + connect(manager,SIGNAL(networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility)),this,SLOT(networkAccessChanged(QNetworkAccessManager::NetworkAccessibility))); } bool SimpleCastTcpService::listen(const QHostAddress& address, quint16 port) @@ -87,10 +88,23 @@ bool SimpleCastTcpService::listen(const QHostAddress& address, quint16 port) //Setup DNSSD dnsService = new KDNSSD::PublicService(QString(),"_simplecast._tcp",this->serverPort(),"local"); dnsService->setParent(this); - dnsService->publishAsync(); + //Start publishing now and if not, wait for networkAccessibleManager to let us know. + if(manager->networkAccessible() == QNetworkAccessManager::Accessible && !dnsService->isPublished()) + { + dnsService->publishAsync(); + } return listening; } +void SimpleCastTcpService::networkAccessChanged(QNetworkAccessManager::NetworkAccessibility accessible) +{ + if(accessible == QNetworkAccessManager::Accessible) + { + dnsService->publishAsync(); + } + +} + void SimpleCastTcpService::close() { QTcpServer::close(); diff --git a/src/simplecasttcpservice.h b/src/simplecasttcpservice.h index f9e12e6..2434442 100644 --- a/src/simplecasttcpservice.h +++ b/src/simplecasttcpservice.h @@ -21,6 +21,7 @@ #include #include #include "minimediaplayer.h" +#include /** * Tcp Server that responds to simple client requests and can be found over DNSSD. @@ -37,9 +38,13 @@ public: protected: void incomingConnection(qintptr handle) override; +private slots: + void networkAccessChanged(QNetworkAccessManager::NetworkAccessibility accessible); + private: MiniMediaPlayer *player; KDNSSD::PublicService *dnsService; + QNetworkAccessManager *manager; };