diff options
Diffstat (limited to 'examples/network/threadedfortuneserver.py')
-rw-r--r-- | examples/network/threadedfortuneserver.py | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/examples/network/threadedfortuneserver.py b/examples/network/threadedfortuneserver.py deleted file mode 100644 index c16c77a27..000000000 --- a/examples/network/threadedfortuneserver.py +++ /dev/null @@ -1,152 +0,0 @@ - -############################################################################# -## -## Copyright (C) 2013 Riverbank Computing Limited. -## Copyright (C) 2016 The Qt Company Ltd. -## Contact: http://www.qt.io/licensing/ -## -## This file is part of the Qt for Python examples of the Qt Toolkit. -## -## $QT_BEGIN_LICENSE:BSD$ -## You may use this file under the terms of the BSD license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of The Qt Company Ltd nor the names of its -## contributors may be used to endorse or promote products derived -## from this software without specific prior written permission. -## -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -## $QT_END_LICENSE$ -## -############################################################################# - -"""PySide2 port of the network/threadedfortuneserver example from Qt v5.x, originating from PyQt""" - -import random - -from PySide2.QtCore import (Signal, QByteArray, QDataStream, QIODevice, - QThread, Qt) -from PySide2.QtWidgets import (QApplication, QDialog, QHBoxLayout, QLabel, - QMessageBox, QPushButton, QVBoxLayout) -from PySide2.QtNetwork import (QHostAddress, QNetworkInterface, QTcpServer, - QTcpSocket) - - -class FortuneThread(QThread): - error = Signal(QTcpSocket.SocketError) - - def __init__(self, socketDescriptor, fortune, parent): - super(FortuneThread, self).__init__(parent) - - self.socketDescriptor = socketDescriptor - self.text = fortune - - def run(self): - tcpSocket = QTcpSocket() - if not tcpSocket.setSocketDescriptor(self.socketDescriptor): - self.error.emit(tcpSocket.error()) - return - - block = QByteArray() - outstr = QDataStream(block, QIODevice.WriteOnly) - outstr.setVersion(QDataStream.Qt_4_0) - outstr.writeUInt16(0) - outstr.writeQString(self.text) - outstr.device().seek(0) - outstr.writeUInt16(block.size() - 2) - - tcpSocket.write(block) - tcpSocket.disconnectFromHost() - tcpSocket.waitForDisconnected() - - -class FortuneServer(QTcpServer): - fortunes = ( - "You've been leading a dog's life. Stay off the furniture.", - "You've got to think about tomorrow.", - "You will be surprised by a loud noise.", - "You will feel hungry again in another hour.", - "You might have mail.", - "You cannot kill time without injuring eternity.", - "Computers are not intelligent. They only think they are.") - - def incomingConnection(self, socketDescriptor): - fortune = self.fortunes[random.randint(0, len(self.fortunes) - 1)] - - thread = FortuneThread(socketDescriptor, fortune, self) - thread.finished.connect(thread.deleteLater) - thread.start() - - -class Dialog(QDialog): - def __init__(self, parent=None): - super(Dialog, self).__init__(parent) - - self.server = FortuneServer() - - statusLabel = QLabel() - statusLabel.setTextInteractionFlags(Qt.TextBrowserInteraction) - statusLabel.setWordWrap(True) - quitButton = QPushButton("Quit") - quitButton.setAutoDefault(False) - - if not self.server.listen(): - QMessageBox.critical(self, "Threaded Fortune Server", - "Unable to start the server: %s." % self.server.errorString()) - self.close() - return - - for ipAddress in QNetworkInterface.allAddresses(): - if ipAddress != QHostAddress.LocalHost and ipAddress.toIPv4Address() != 0: - break - else: - ipAddress = QHostAddress(QHostAddress.LocalHost) - - ipAddress = ipAddress.toString() - - statusLabel.setText("The server is running on\n\nIP: %s\nport: %d\n\n" - "Run the Fortune Client example now." % (ipAddress, self.server.serverPort())) - - quitButton.clicked.connect(self.close) - - buttonLayout = QHBoxLayout() - buttonLayout.addStretch(1) - buttonLayout.addWidget(quitButton) - buttonLayout.addStretch(1) - - mainLayout = QVBoxLayout() - mainLayout.addWidget(statusLabel) - mainLayout.addLayout(buttonLayout) - self.setLayout(mainLayout) - - self.setWindowTitle("Threaded Fortune Server") - - -if __name__ == '__main__': - - import sys - - app = QApplication(sys.argv) - dialog = Dialog() - dialog.show() - sys.exit(dialog.exec_()) |