diff --git a/README.md b/README.md index a78174d..63c71ca 100644 --- a/README.md +++ b/README.md @@ -107,4 +107,12 @@ qDebug() << zcs->txt["Qt"]; Qt5 -On Linux, libavahi-client-dev and libavahi-common-dev \ No newline at end of file +On Linux, libavahi-client-dev and libavahi-common-dev + +### Apple App Store deployment + +Publishing GPL software in the App Store is a [violation of the GPL](https://news.ycombinator.com/item?id=3488833). If you need to publish an app in the Apple App Store that uses QZeroConf, please contact me for a copy of QZeroConf with a BSD licence. + +### iOS device sleep + +When iOS puts the device to sleep, it breaks the DNS-SD browser and service publisher. The only way around this is to call stopServicePublish() and stopBrowser() when the application state changes to Qt::ApplicationSuspended (sleep) and then call start startPublish() and startBrowser() when the application state changes to Qt::ApplicationActive (wake). See appStateChanged() in example. diff --git a/example/window.cpp b/example/window.cpp index f58e85f..757f4a9 100644 --- a/example/window.cpp +++ b/example/window.cpp @@ -24,6 +24,7 @@ Example app to demonstrate service publishing and service discovery --------------------------------------------------------------------------------------------------- **************************************************************************************************/ +#include #include #include #include @@ -54,9 +55,9 @@ mainWindow::mainWindow() connect(&zeroConf, SIGNAL(serviceAdded(QZeroConfService *)), this, SLOT(addService(QZeroConfService *))); connect(&zeroConf, SIGNAL(serviceRemoved(QZeroConfService *)), this, SLOT(removeService(QZeroConfService *))); + connect(qGuiApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(appStateChanged(Qt::ApplicationState))); - zeroConf.startBrowser("_qtzeroconf_test._tcp"); - startPublish(); + publishEnabled = 1; } void mainWindow::buildGUI() @@ -68,13 +69,13 @@ void mainWindow::buildGUI() button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); layout->addWidget(button); layout->setAlignment(button, Qt::AlignHCenter); - connect(button, SIGNAL(clicked()), this, SLOT(startPublish())); + connect(button, &QPushButton::clicked, this, &mainWindow::startPublishClicked); button = new QPushButton(tr(" Disable Publish ")); button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); layout->addWidget(button); layout->setAlignment(button, Qt::AlignHCenter); - connect(button, SIGNAL(clicked()), this, SLOT(stopPublish())); + connect(button, &QPushButton::clicked, this, &mainWindow::stopPublishClicked); table.verticalHeader()->hide(); table.horizontalHeader()->hide(); @@ -102,21 +103,39 @@ QString mainWindow::buildName(void) return name; } +void mainWindow::appStateChanged(Qt::ApplicationState state) +{ + if (state == Qt::ApplicationSuspended) { + zeroConf.stopServicePublish(); + zeroConf.stopBrowser(); + } + else if (state == Qt::ApplicationActive) { + if (publishEnabled && !zeroConf.publishExists()) + startPublish(); + if (!zeroConf.browserExists()) + zeroConf.startBrowser("_qtzeroconf_test._tcp"); + } +} + // ---------- Service Publish ---------- void mainWindow::startPublish() { - if (publishEnabled) - return; - publishEnabled = 1; - zeroConf.clearServiceTxtRecords(); zeroConf.addServiceTxtRecord("Qt", "the best!"); zeroConf.addServiceTxtRecord("ZeroConf is nice too"); zeroConf.startServicePublish(buildName().toUtf8(), "_qtzeroconf_test._tcp", "local", 11437); } -void mainWindow::stopPublish() +void mainWindow::startPublishClicked() +{ + if (publishEnabled) + return; + publishEnabled = 1; + startPublish(); +} + +void mainWindow::stopPublishClicked() { if (!publishEnabled) return; diff --git a/example/window.h b/example/window.h index b259b50..b4a53f1 100644 --- a/example/window.h +++ b/example/window.h @@ -40,14 +40,16 @@ public: private: void buildGUI(); + void startPublish(); QString buildName(void); QTableWidget table; QZeroConf zeroConf; bool publishEnabled; private slots: - void startPublish(); - void stopPublish(); + void appStateChanged(Qt::ApplicationState state); + void startPublishClicked(); + void stopPublishClicked(); void addService(QZeroConfService *item); void removeService(QZeroConfService *item); };