From 234e867a8a069bf22544809bea17b4ff78c5142c Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Wed, 10 Apr 2019 17:07:58 -0400 Subject: [PATCH] Add code to publish/republish once network is reachable. Fixes #1. --- src/simplecasttcpservice.cpp | 18 ++++++++++++++++-- src/simplecasttcpservice.h | 5 +++++ 2 files changed, 21 insertions(+), 2 deletions(-) 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; }; -- GitLab