From 826b606a5d8f274c55f525119299aef2fe143aaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Tue, 21 Mar 2023 10:16:04 +0100 Subject: Remove loopback network example It doesn't showcase anything interesting that other examples don't already show off. Pick-to: 6.5 Change-Id: Ie95c3ddb3ff52b3beab54bd6fa75fb75ae5c7ba5 Reviewed-by: Timur Pocheptsov Reviewed-by: Konrad Kujawa --- doc/global/manifest-meta.qdocconf | 1 - examples/network/CMakeLists.txt | 1 - examples/network/doc/images/loopback-example.png | Bin 6195 -> 0 bytes examples/network/doc/src/loopback.qdoc | 14 -- examples/network/loopback/CMakeLists.txt | 38 ------ examples/network/loopback/dialog.cpp | 155 ----------------------- examples/network/loopback/dialog.h | 51 -------- examples/network/loopback/loopback.pro | 9 -- examples/network/loopback/main.cpp | 14 -- examples/network/network.pro | 1 - src/network/doc/src/examples.qdoc | 1 - src/network/socket/qtcpserver.cpp | 2 +- src/network/socket/qtcpsocket.cpp | 2 +- 13 files changed, 2 insertions(+), 287 deletions(-) delete mode 100644 examples/network/doc/images/loopback-example.png delete mode 100644 examples/network/doc/src/loopback.qdoc delete mode 100644 examples/network/loopback/CMakeLists.txt delete mode 100644 examples/network/loopback/dialog.cpp delete mode 100644 examples/network/loopback/dialog.h delete mode 100644 examples/network/loopback/loopback.pro delete mode 100644 examples/network/loopback/main.cpp diff --git a/doc/global/manifest-meta.qdocconf b/doc/global/manifest-meta.qdocconf index 1e4be31122..6631960931 100644 --- a/doc/global/manifest-meta.qdocconf +++ b/doc/global/manifest-meta.qdocconf @@ -113,7 +113,6 @@ manifestmeta.ios.names = "QtCore/Contiguous Cache Example" \ "QtCore/Queued Custom Type Example" \ "QtGui/OpenGL Window Example" \ "QtGui/Raster Window Example" \ - "QtNetwork/Loopback Example" \ "QtNetwork/Network Chat Example" \ "QtNetwork/Torrent Example" \ "QtOpenGL/2D Painting Example" \ diff --git a/examples/network/CMakeLists.txt b/examples/network/CMakeLists.txt index 8c6587693c..4e19a2dffd 100644 --- a/examples/network/CMakeLists.txt +++ b/examples/network/CMakeLists.txt @@ -12,7 +12,6 @@ if(TARGET Qt6::Widgets) qt_internal_add_example(broadcastreceiver) qt_internal_add_example(broadcastsender) qt_internal_add_example(http) - qt_internal_add_example(loopback) qt_internal_add_example(threadedfortuneserver) qt_internal_add_example(torrent) qt_internal_add_example(multicastreceiver) diff --git a/examples/network/doc/images/loopback-example.png b/examples/network/doc/images/loopback-example.png deleted file mode 100644 index 2b1bd4a0f2..0000000000 Binary files a/examples/network/doc/images/loopback-example.png and /dev/null differ diff --git a/examples/network/doc/src/loopback.qdoc b/examples/network/doc/src/loopback.qdoc deleted file mode 100644 index 657e2959bf..0000000000 --- a/examples/network/doc/src/loopback.qdoc +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \example loopback - \title Loopback Example - \ingroup examples-network - \brief Demonstrates the client-server communication on a local host. - - The example demonstrates how the clients and servers on a local host - communicate with each other. - - \image loopback-example.png -*/ diff --git a/examples/network/loopback/CMakeLists.txt b/examples/network/loopback/CMakeLists.txt deleted file mode 100644 index e12416a139..0000000000 --- a/examples/network/loopback/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(loopback LANGUAGES CXX) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/network/loopback") - -find_package(Qt6 REQUIRED COMPONENTS Core Gui Network Widgets) - -qt_standard_project_setup() - -qt_add_executable(loopback - dialog.cpp dialog.h - main.cpp -) - -set_target_properties(loopback PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -target_link_libraries(loopback PRIVATE - Qt6::Core - Qt6::Gui - Qt6::Network - Qt6::Widgets -) - -install(TARGETS loopback - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/network/loopback/dialog.cpp b/examples/network/loopback/dialog.cpp deleted file mode 100644 index f2391fd5b8..0000000000 --- a/examples/network/loopback/dialog.cpp +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "dialog.h" - -#include -#include - -static const int TotalBytes = 50 * 1024 * 1024; -static const int PayloadSize = 64 * 1024; // 64 KB - -Dialog::Dialog(QWidget *parent) - : QDialog(parent) -{ - clientProgressBar = new QProgressBar; - clientStatusLabel = new QLabel(tr("Client ready")); - serverProgressBar = new QProgressBar; - serverStatusLabel = new QLabel(tr("Server ready")); - - startButton = new QPushButton(tr("&Start")); - quitButton = new QPushButton(tr("&Quit")); - - buttonBox = new QDialogButtonBox; - buttonBox->addButton(startButton, QDialogButtonBox::ActionRole); - buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole); - - connect(startButton, &QAbstractButton::clicked, this, &Dialog::start); - connect(quitButton, &QAbstractButton::clicked, qApp, &QCoreApplication::quit); - connect(&tcpServer, &QTcpServer::newConnection, - this, &Dialog::acceptConnection); - connect(&tcpClient, &QAbstractSocket::connected, this, &Dialog::startTransfer); - connect(&tcpClient, &QIODevice::bytesWritten, - this, &Dialog::updateClientProgress); - connect(&tcpClient, &QAbstractSocket::errorOccurred, - this, &Dialog::displayError); - - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addWidget(clientProgressBar); - mainLayout->addWidget(clientStatusLabel); - mainLayout->addWidget(serverProgressBar); - mainLayout->addWidget(serverStatusLabel); - mainLayout->addStretch(1); - mainLayout->addSpacing(10); - mainLayout->addWidget(buttonBox); - setLayout(mainLayout); - - setWindowTitle(tr("Loopback")); -} - -void Dialog::start() -{ - startButton->setEnabled(false); - -#ifndef QT_NO_CURSOR - QGuiApplication::setOverrideCursor(Qt::WaitCursor); -#endif - - bytesWritten = 0; - bytesReceived = 0; - - while (!tcpServer.isListening() && !tcpServer.listen()) { - QMessageBox::StandardButton ret = QMessageBox::critical(this, - tr("Loopback"), - tr("Unable to start the test: %1.") - .arg(tcpServer.errorString()), - QMessageBox::Retry - | QMessageBox::Cancel); - if (ret == QMessageBox::Cancel) - return; - } - - serverStatusLabel->setText(tr("Listening")); - clientStatusLabel->setText(tr("Connecting")); - tcpClient.connectToHost(QHostAddress::LocalHost, tcpServer.serverPort()); -} - -void Dialog::acceptConnection() -{ - tcpServerConnection = tcpServer.nextPendingConnection(); - if (!tcpServerConnection) { - serverStatusLabel->setText(tr("Error: got invalid pending connection!")); - return; - } - - connect(tcpServerConnection, &QIODevice::readyRead, - this, &Dialog::updateServerProgress); - connect(tcpServerConnection, &QAbstractSocket::errorOccurred, - this, &Dialog::displayError); - connect(tcpServerConnection, &QTcpSocket::disconnected, - tcpServerConnection, &QTcpSocket::deleteLater); - - serverStatusLabel->setText(tr("Accepted connection")); - tcpServer.close(); -} - -void Dialog::startTransfer() -{ - // called when the TCP client connected to the loopback server - bytesToWrite = TotalBytes - int(tcpClient.write(QByteArray(PayloadSize, '@'))); - clientStatusLabel->setText(tr("Connected")); -} - -void Dialog::updateServerProgress() -{ - bytesReceived += int(tcpServerConnection->bytesAvailable()); - tcpServerConnection->readAll(); - - serverProgressBar->setMaximum(TotalBytes); - serverProgressBar->setValue(bytesReceived); - serverStatusLabel->setText(tr("Received %1MB") - .arg(bytesReceived / (1024 * 1024))); - - if (bytesReceived == TotalBytes) { - tcpServerConnection->close(); - startButton->setEnabled(true); -#ifndef QT_NO_CURSOR - QGuiApplication::restoreOverrideCursor(); -#endif - } -} - -void Dialog::updateClientProgress(qint64 numBytes) -{ - // called when the TCP client has written some bytes - bytesWritten += int(numBytes); - - // only write more if not finished and when the Qt write buffer is below a certain size. - if (bytesToWrite > 0 && tcpClient.bytesToWrite() <= 4 * PayloadSize) - bytesToWrite -= tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), '@')); - - clientProgressBar->setMaximum(TotalBytes); - clientProgressBar->setValue(bytesWritten); - clientStatusLabel->setText(tr("Sent %1MB").arg(bytesWritten / (1024 * 1024))); -} - -void Dialog::displayError(QAbstractSocket::SocketError socketError) -{ - if (socketError == QTcpSocket::RemoteHostClosedError) - return; - - QMessageBox::information(this, tr("Network error"), - tr("The following error occurred: %1.") - .arg(tcpClient.errorString())); - - tcpClient.close(); - tcpServer.close(); - clientProgressBar->reset(); - serverProgressBar->reset(); - clientStatusLabel->setText(tr("Client ready")); - serverStatusLabel->setText(tr("Server ready")); - startButton->setEnabled(true); -#ifndef QT_NO_CURSOR - QGuiApplication::restoreOverrideCursor(); -#endif -} diff --git a/examples/network/loopback/dialog.h b/examples/network/loopback/dialog.h deleted file mode 100644 index c39ffb00ce..0000000000 --- a/examples/network/loopback/dialog.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef DIALOG_H -#define DIALOG_H - -#include -#include -#include - -QT_BEGIN_NAMESPACE -class QDialogButtonBox; -class QLabel; -class QProgressBar; -class QPushButton; -QT_END_NAMESPACE - -class Dialog : public QDialog -{ - Q_OBJECT - -public: - Dialog(QWidget *parent = nullptr); - -public slots: - void start(); - void acceptConnection(); - void startTransfer(); - void updateServerProgress(); - void updateClientProgress(qint64 numBytes); - void displayError(QAbstractSocket::SocketError socketError); - -private: - QProgressBar *clientProgressBar = nullptr; - QProgressBar *serverProgressBar = nullptr; - QLabel *clientStatusLabel = nullptr; - QLabel *serverStatusLabel = nullptr; - - QPushButton *startButton = nullptr; - QPushButton *quitButton = nullptr; - QDialogButtonBox *buttonBox = nullptr; - - QTcpServer tcpServer; - QTcpSocket tcpClient; - QTcpSocket *tcpServerConnection = nullptr; - int bytesToWrite = 0; - int bytesWritten = 0; - int bytesReceived = 0; -}; - -#endif diff --git a/examples/network/loopback/loopback.pro b/examples/network/loopback/loopback.pro deleted file mode 100644 index 14b22daa57..0000000000 --- a/examples/network/loopback/loopback.pro +++ /dev/null @@ -1,9 +0,0 @@ -QT += network widgets - -HEADERS = dialog.h -SOURCES = dialog.cpp \ - main.cpp - -# install -target.path = $$[QT_INSTALL_EXAMPLES]/network/loopback -INSTALLS += target diff --git a/examples/network/loopback/main.cpp b/examples/network/loopback/main.cpp deleted file mode 100644 index 3eb7cbf57d..0000000000 --- a/examples/network/loopback/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "dialog.h" - -#include - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - Dialog dialog; - dialog.show(); - return app.exec(); -} diff --git a/examples/network/network.pro b/examples/network/network.pro index fcd38d3116..7981560943 100644 --- a/examples/network/network.pro +++ b/examples/network/network.pro @@ -9,7 +9,6 @@ qtHaveModule(widgets) { broadcastreceiver \ broadcastsender \ http \ - loopback \ threadedfortuneserver \ torrent \ multicastreceiver \ diff --git a/src/network/doc/src/examples.qdoc b/src/network/doc/src/examples.qdoc index 7202c28d6d..ee9084c74c 100644 --- a/src/network/doc/src/examples.qdoc +++ b/src/network/doc/src/examples.qdoc @@ -26,7 +26,6 @@ \li \l{network/fortuneclient}{Fortune Client}\raisedaster \li \l{network/fortuneserver}{Fortune Server}\raisedaster \li \l{network/http}{HTTP} - \li \l{network/loopback}{Loopback} \li \l{network/threadedfortuneserver}{Threaded Fortune Server}\raisedaster \li \l{network/torrent}{Torrent} \li \l{network/securesocketclient}{Secure Socket Client} diff --git a/src/network/socket/qtcpserver.cpp b/src/network/socket/qtcpserver.cpp index 31a3242d71..eb2d757a08 100644 --- a/src/network/socket/qtcpserver.cpp +++ b/src/network/socket/qtcpserver.cpp @@ -44,7 +44,7 @@ connection is available or a timeout expires. \sa QTcpSocket, {Fortune Server}, {Threaded Fortune Server}, - {Loopback Example}, {Torrent Example} + {Torrent Example} */ /*! \fn void QTcpServer::newConnection() diff --git a/src/network/socket/qtcpsocket.cpp b/src/network/socket/qtcpsocket.cpp index b99a61aecd..979382f26c 100644 --- a/src/network/socket/qtcpsocket.cpp +++ b/src/network/socket/qtcpsocket.cpp @@ -25,7 +25,7 @@ \sa QTcpServer, QUdpSocket, QNetworkAccessManager, {Fortune Server}, {Fortune Client}, {Threaded Fortune Server}, {Blocking Fortune Client}, - {Loopback Example}, {Torrent Example} + {Torrent Example} */ #include "qtcpsocket.h" -- cgit v1.2.3