Пример #1
0
class PeerApplication(QtWidgets.QMainWindow):
    def __init__(self):
        super(PeerApplication, self).__init__()
        os.system("pyuic5 -x GUI/gui.ui -o GUI/gui.py")  # compile the gui
        from GUI.gui import Ui_MainWindow  # import the newly compiled gui
        self.ui = Ui_MainWindow()  # create an instance of the GUI
        self.ui.setupUi(self)
        self.configure()
        self.peer = Peer()
        self.show()

    # override the closeEvent method
    def closeEvent(self, event):
        # print ("User has clicked the red x on the main window")
        event.accept()

    def configure(self):
        self.ui.connect.clicked.connect(self.makeConnection)
        self.ui.search.clicked.connect(self.search)
        self.ui.go.clicked.connect(self.enterCommand)
        self.ui.server.setText("127.0.0.2")
        self.ui.port.setText("3000")
        self.ui.username.setText("tom")
        self.ui.hostname.setText("hostname")
        self.ui.speed.addItem("Ethernet")
        self.ui.speed.addItem("Modem")
        self.ui.speed.addItem("T1")
        self.ui.speed.addItem("T3")

    def makeConnection(self, command=None, keyword=None):
        numPeers = self.peer.connectToServer(self.ui.server.text(),
                                             int(self.ui.port.text()),
                                             self.ui.username.text(),
                                             self.ui.speed.currentText())
        self.ui.commandLine.appendPlainText(
            ">> " + "Connected to server, Users online: " + numPeers)

        # print("connecting to server: " + self.ui.server.text())
        # if not command:
        #     command = 'connect'
        # self.peer.connect(command, self.ui.server.text(), int(self.ui.port.text()), self.ui.username.text(),
        #                   self.ui.hostname.text(), self.ui.speed.currentText(), keyword=keyword)

    def search(self):
        searchTerm = self.ui.keyword.text()
        if searchTerm:
            fileData = self.peer.searchServer(searchTerm)
            if fileData:
                tokens = fileData.split(",")
                while tokens:
                    speed = tokens.pop(0)
                    username = tokens.pop(0)
                    fileName = tokens.pop(0)
                    self.ui.results.insertRow(self.ui.results.rowCount())
                    rowIndex = self.ui.results.rowCount() - 1
                    self.ui.results.setItem(rowIndex, 0,
                                            QTableWidgetItem(speed))
                    self.ui.results.setItem(rowIndex, 1,
                                            QTableWidgetItem(username))
                    self.ui.results.setItem(rowIndex, 2,
                                            QTableWidgetItem(fileName))

        # print("searching server for \"" + self.ui.keyword.text() + "\"")
        # self.makeConnection('search', keyword=self.ui.keyword.text())
        #
        # # Clear the current rows
        # self.ui.results.setRowCount(0)
        #
        # # Display all of the files
        # for file in self.peer.files:
        #     self.ui.results.insertRow(self.ui.results.rowCount())
        #     rowIndex = self.ui.results.rowCount() - 1
        #     self.ui.results.setItem(rowIndex, 0, QTableWidgetItem(file.find('speed').text))
        #     self.ui.results.setItem(rowIndex, 1, QTableWidgetItem(file.find('hostname').text))
        #     self.ui.results.setItem(rowIndex, 2, QTableWidgetItem(file.find('filename').text))

    def enterCommand(self):
        if (self.ui.command.text()) == "listen":
            self.ui.commandLine.appendPlainText(
                ">> Listening for file requests...")
            requestedFileName = self.peer.notifyServer(self.ui.username.text())
            self.ui.commandLine.appendPlainText(">> " + "Peer requested: " +
                                                requestedFileName)

        else:
            # we are requesting a file from another peer
            request = self.ui.command.text().split(" ")  # username file
            if len(request) == 2:
                username = request[0]
                filename = request[1]
                # self.peer.requestHostPort(request[0])
                self.ui.commandLine.appendPlainText(">> Requesting " +
                                                    filename + " from " +
                                                    username)
                requestedFileText = self.peer.fetchFile(username, filename)
                self.ui.commandLine.appendPlainText(">> Received!")
                self.ui.commandLine.appendPlainText(">> " + requestedFileText)
            else:
                print("please enter <username> <filename>")