Example #1
0
 def load(self):
     exception = None
     fh = None
     try:
         if not self.filename:
             raise IOError("no filename specified for loading")
         fh = QFile(self.filename)
         if not fh.open(QIODevice.ReadOnly):
             raise IOError(fh.errorString())
         stream = QDataStream(fh)
         magic = stream.readInt32()
         if magic != MAGIC_NUMBER:
             raise IOError("unrecognized file type")
         fileVersion = stream.readInt16()
         if fileVersion != FILE_VERSION:
             raise IOError("unrecognized file type version")
         self.ships = {}
         while not stream.atEnd():
             name = stream.readQString()
             owner = stream.readQString()
             country = stream.readQString()
             description = stream.readQString()
             teu = stream.readInt32()
             ship = Ship(name, owner, country, teu, description)
             self.ships[id(ship)] = ship
             self.owners.add(owner)
             self.countries.add(country)
         self.dirty = False
     except IOError as e:
         exception = e
     finally:
         if fh is not None:
             fh.close()
         if exception is not None:
             raise exception
Example #2
0
    def getMsg(self):
        self.buffer.append(self.readAll())
        totalLen = self.buffer.size()
        while totalLen:
            in_ = QDataStream(self.buffer, QIODevice.ReadOnly)
            in_.setVersion(QDataStream.Qt_5_9)

            if self.msgLen == 0:
                if totalLen >= self.headLen:
                    self.msgLen = in_.readInt32()
                    if totalLen >= self.headLen + self.msgLen:
                        msg = ""
                        msg = in_.readQString()
                        self.getMsgSignal.emit(msg)
                        self.buffer = self.buffer.right(totalLen -
                                                        self.headLen -
                                                        self.msgLen - 4)
                        self.msgLen = 0
                        totalLen = self.buffer.size()
                    else:
                        break
                else:
                    break
            else:
                if totalLen >= self.headLen + self.msgLen:
                    in_.readInt32()
                    msg = ""
                    msg = in_.readQString()
                    self.getMsgSignal.emit(msg)
                    self.buffer = self.buffer.right(totalLen - self.headLen -
                                                    self.msgLen - 4)
                    self.msgLen = 0
                    totalLen = self.buffer.size()
                else:
                    break
Example #3
0
    def onDisposed(self, datagram):
        if datagram.size() == 0:
            return

        block = self._unescape(datagram)
        istream = QDataStream(block)
        istream.setVersion(QDataStream.Qt_4_8)
        magic = istream.readQString()
        response = istream.readQString()
        if istream.status() == QDataStream.Ok:
            if response == "extendedData":
                self._extendedDataCategory = istream.readQString()
                self._extendedDataCompressed = istream.readBool()
                self._extendedDataSize = istream.readInt()
                self._extendedDataBuffer.clear()
            else:
                handled = False
                for delegate in self._delegates:
                    if hasattr(delegate, response):
                        getattr(delegate, response)(istream)
                        handled = True
                        if istream.status() != QDataStream.Ok:
                            print("{}: eeeeeeeeeeeeee".format(response))
                        break
                if not handled:
                    print("Unhandled response:", response)
        else:
            print("onDisposed failed: block size", block.size())
    def readResponse(self):
        stream = QDataStream(self.socket)
        stream.setVersion(QDataStream.Qt_5_7)

        while True:
            if self.nextBlockSize == 0:
                if self.socket.bytesAvailable() < SIZEOF_UINT16:
                    break
                self.nextBlockSize = stream.readUInt16()
            if self.socket.bytesAvailable() < self.nextBlockSize:
                break
            action = ""
            room = ""
            date = QDate()
            #stream >> action >> room
            action = stream.readQString()
            room = stream.readQString()
            if action != "ERROR":
                stream >> date
            if action == "ERROR":
                msg = "Error: {0}".format(room)
            elif action == "BOOK":
                msg = "Booked room {0} for {1}".format(
                    room, date.toString(Qt.ISODate))
            elif action == "UNBOOK":
                msg = "Unbooked room {0} for {1}".format(
                    room, date.toString(Qt.ISODate))
            self.responseLabel.setText(msg)
            self.updateUi()
            self.nextBlockSize = 0
Example #5
0
    def onDrop(self, event: QDropEvent):
        if DEBUG:
            print('CalcSubWnd : onDrop')
            print(event.mimeData().text())
        if event.mimeData().hasFormat(LISTBOX_MIMETYPE):
            eventData = event.mimeData().data(LISTBOX_MIMETYPE)
            dataStream = QDataStream(eventData, QIODevice.ReadOnly)
            pixmap = QPixmap()
            dataStream >> pixmap
            op_code = dataStream.readQString()
            text = dataStream.readQString()

            mouse_pos = event.pos()
            scene_pos = self.scene.grScene.views()[0].mapToScene(mouse_pos)

            if DEBUG: print(f'DROP: {op_code} {text} at {scene_pos}')

            try:
                node = NodeFactory.from_op_code(op_code)(self.scene)
                node.setPos(scene_pos.x(), scene_pos.y())
                self.scene.history.storeHistory('Create node {}'.format(
                    node.__class__.__name__))

                event.setDropAction(Qt.MoveAction)
                event.accept()

            except Exception as e:
                dumpException(e)
        else:
            if DEBUG:
                print(' ... drop ignored, not requested format ',
                      LISTBOX_MIMETYPE)
            event.ignore()
    def my_readResponse(self):
        stream = QDataStream(self.socket)

        while True:
            if self.nextBlockSize == 0:
                if self.socket.bytesAvailable() < SIZEOF_UINT16:
                    break
                self.nextBlockSize = stream.readUInt16()
            if self.socket.bytesAvailable() < self.nextBlockSize:
                break

            ser_reply = stream.readQString()

            if ser_reply == 'None':
                QMessageBox.critical(self, '错误提示!', self.tr('您没有开通服务器交易功能!'))
                rec_text = my_cur_time() + ' 您没有开通服务器交易功能!'
                self.statusBar().showMessage(rec_text)
                my_operating_record(rec_text)
            else:
                rec_text = my_cur_time() + ' 服务器已接收指令:{0}'.format(ser_reply)
                self.statusBar().showMessage(rec_text)
                my_operating_record(rec_text)

            self.nextBlockSize = 0
            self.socket.close()
            self.my_updateUI()
            rec_text = my_cur_time() + ' 已断开服务器连接!'
            my_operating_record(rec_text)
Example #7
0
    def load_datastream(self, fname):
        error = None
        fh = None

        try:
            fh = QFile(fname)
            if not fh.open(QIODevice.ReadOnly):
                raise IOError(str(fh.errorString()))

            stream = QDataStream(fh)
            while not stream.atEnd():
                self.label = stream.readQString()
                self.diameter = stream.readInt32()
                self.top_elev = stream.readDouble()
                self.design_load = stream.readDouble()
        except EnvironmentError as e:
            error = "Failed to load:{0}".format(e)

        finally:
            if fh is not None:
                fh.close()
            if error is not None:
                print(error)
            self.__dirty = False
            print("load data from{0}".format(QFileInfo(fname).fileName()))


# 缺少计算参数的类
Example #8
0
    def onDrop(self, event):
        print("on Drop")
        if event.mimeData().hasFormat(LISTBOX_MIMETYPE):
            eventData = event.mimeData().data(LISTBOX_MIMETYPE)
            dataStream = QDataStream(eventData, QIODevice.ReadOnly)
            # pixmap = QPixmap()
            # dataStream >> pixmap
            op_code = dataStream.readInt()
            text = dataStream.readQString()

            mouse_position = event.pos()
            scene_position = self.scene.grScene.views()[0].mapToScene(
                mouse_position)

            print("GOT DROP: [%d] '%s'" % (op_code, text), "mouse:",
                  mouse_position, "scene:", scene_position)

            node = Node(self.scene, text, inputs=[1], outputs=[1])
            node.setPos(scene_position.x(), scene_position.y())
            self.scene.addNode(node)

            event.setDropAction(Qt.MoveAction)
            event.accept()
        else:
            # print(" ... drop ignored, not requested format '%s'" % LISTBOX_MIMETYPE)
            event.ignore()
    def readMessage(self):
        """
        读取文件数据
        """
        receiver = QDataStream(self.tcpClient)
        receiver.setVersion(QDataStream.Qt_5_4)

        if self.bytesReceive <= 2:
            if self.tcpClient.bytesAvailable() >= 2 and self.fileNameSize == 0:
                self.TotalBytes = receiver.readInt64()
                self.fileNameSize = receiver.readInt64()
                self.bytesReceive += 2

            if self.tcpClient.bytesAvailable() >= self.fileNameSize and self.fileNameSize != 0:
                self.fileName = receiver.readQString()
                self.bytesReceive += self.fileNameSize
                if not(self.localFile.open(QFile.WriteOnly)):
                    QMessageBox.warning(self, "应用程序", "无法读取文件 {}:\n {}".format(self.fileName, self.localFile.errorString()))
                    return
            else:
                return

        if self.bytesReceive < self.TotalBytes:
            self.bytesReceive += self.tcpClient.bytesAvailable()
            inBlock = self.tcpClient.readAll()
            self.localFile.write(inBlock)
            inBlock.resize(0)

        useTime = self.time.elapsed() / 1000
        
        bytesReceived = self.bytesReceive / (1024*1024)
        speed = bytesReceived / useTime
        total = self.TotalBytes / (1024*1024)
        left = (total - bytesReceived) / speed

        if bytesReceived < 0.01:
            bytesReceived = self.bytesReceive / 1024
            speed = bytesReceived / useTime / 1024
            total = self.TotalBytes / 1024
            if left > 0:
                msg = "已接收 {0:.2f} KB ({1:.2f}KB/s)\n共{2:.2f}KB.已用时:{3:.1f}秒\n估计剩余时间:{4:.1f}秒".format(bytesReceived, speed, total, useTime, left)
            else:
                msg = "已接收 {0:.2f} KB ({1:.2f}KB/s)\n共{2:.2f}KB.已用时:{3:.1f}秒\n".format(bytesReceived, speed, total, useTime)

        else:
            if left > 0:
                msg = "已接收 {0:.2f} MB ({1:.2f}MB/s)\n共{2:.2f}MB.已用时:{3:.1f}秒\n估计剩余时间:{4:.1f}秒".format(bytesReceived, speed, total, useTime, left)
            else:
                msg = "已接收 {0:.2f} MB ({1:.2f}MB/s)\n共{2:.2f}MB.已用时:{3:.1f}秒\n".format(bytesReceived, speed, total, useTime)

        self.progressBar.setMaximum(total)
        self.progressBar.setValue(bytesReceived)

        self.tcpClientStatuslabel.setText(msg)
        
        if self.bytesReceive == self.TotalBytes:
            self.localFile.close()
            self.tcpClient.close()
            self.tcpClientStatuslabel.setText("接收文件{}完毕".format(self.fileName))
            self.tcpClientBtn.setEnabled(False)
 def read_data(self):
     for client_id, client_socket in enumerate(self.clients):
         if client_socket.bytesAvailable() > 0:
             stream = QDataStream(client_socket)
             stream.setVersion(QDataStream.Qt_5_9)
             stream.readUInt32()
             client_data = stream.readQString()
             self.return_data_to_clients(client_id, client_data)
Example #11
0
 def readData(self):
     instr = QDataStream(self.tcpSocket)
     data = instr.readQString()
     #print(data)
     for i in range(len(data)):
         if data[i] == "1":
             self.players[1].keyDown[i] = True
         else:
             self.players[1].keyDown[i] = False
Example #12
0
 def readData(self):
     instr = QDataStream(self.tcpSocket)
     data = instr.readQString()
     #print(data)
     controls = [False, False, False, False, False]
     for i in range(len(data)):
         if data[i] == "1":
             self.controls2[i] = True
         else:
             self.controls2[i] = False
Example #13
0
 def ReadFile(self):
     file = QFile("./doc/test.txt")  #创建文件对象
     isok = file.open(QIODevice.ReadOnly)  #以只写的方式打开文件对象
     if isok:
         stream = QDataStream(file)  #创建数据流,和文件对象关联
         str = stream.readQString()  #读的时候按写的顺序取
         num = stream.readInt()
         print(str)
         print(num)
         file.close()
Example #14
0
    def dropEvent(self, event: QDropEvent):
        if event.mimeData().hasFormat('application/x-simitemdata'):
            item_data = event.mimeData().data('application/x-simitemdata')
            data_stream = QDataStream(item_data, QIODevice.ReadOnly)
            s = data_stream.readQString()

            self.env.add_element_by_name(s, event.pos().x(), event.pos().y())
            self.update()

            event.acceptProposedAction()
        else:
            event.ignore()
Example #15
0
    def readResponse(self):
        stream = QDataStream(self.socket)
        stream.setVersion(QDataStream.Qt_5_7)

        while True:
            if self.nextBlockSize == 0:
                if self.socket.bytesAvailable() < SIZEOF_UINT16:
                    break
                self.nextBlockSize = stream.readUInt16()
            if self.socket.bytesAvailable() < self.nextBlockSize:
                break
            action = ""
            room = ""
            date = QDate()
            action = stream.readQString()
            room = stream.readQString()
            if action == "BOOKINGSFORROOM":
                dates = []
                for x in range(stream.readInt32()):
                    stream >> date
                    dates.append(str(date.toString(Qt.ISODate)))
                dates = ", ".join(dates)
            if action not in ("BOOKINGSFORROOM", "ERROR"):
                stream >> date
            if action == "ERROR":
                msg = "Error: {0}".format(room)
            elif action == "BOOK":
                msg = "Booked room {0} for {1}".format(
                    room, date.toString(Qt.ISODate))
            elif action == "UNBOOK":
                msg = "Unbooked room {0} for {1}".format(
                    room, date.toString(Qt.ISODate))
            elif action == "BOOKINGSONDATE":
                msg = "Rooms booked on {0}: {1}".format(
                    date.toString(Qt.ISODate), room)
            elif action == "BOOKINGSFORROOM":
                msg = "Room {0} is booked on: {1}".format(room, dates)
            self.responseLabel.setText(msg)
            self.updateUi()
            self.nextBlockSize = 0
    def read_data(self):
        stream = QDataStream(self.socket)
        stream.setVersion(QDataStream.Qt_5_9)

        while True:
            if self.socket.bytesAvailable() <= 0:
                break
            stream.readUInt32()
            text_from_server = stream.readQString()
            if self.text_widget:
                print('display_text')
                print(text_from_server)
                self.text_widget.append(text_from_server)
Example #17
0
 def _drop_folders(self, action, mime_data, parent):
     mime_format = mime_data.formats()[0]
     drop_data = mime_data.data(mime_format)
     stream = QDataStream(drop_data, QIODevice.ReadOnly)
     idx_count = stream.readInt()
     for _ in range(idx_count):
         tmp_str = stream.readQString()
         id_list = (int(i) for i in tmp_str.split(','))
         index = self._restore_index(id_list)
         if action == DropMoveFolder:
             self._move_folder(index, parent)
         else:
             self._copy_folder(index, parent)
     return True
Example #18
0
    def _recvResponse(self, socket):
        data = b""
        while not self._stop_event.is_set():
            new_data = socket.recv(64)
            if len(new_data) == 0:
                break
            data += new_data

        block = QByteArray(data)
        stream = QDataStream(block)
        stream.setVersion(QDataStream.Qt_4_0)
        blocksize = stream.readUInt16()
        resp = stream.readQString()

        return resp
Example #19
0
    def receiveMessage(self):   
        print("received smtg")     

        for s in self.connections:


            if s.bytesAvailable() > 0 :

                stream = QDataStream(s)
                stream.setVersion(QDataStream.Qt_4_9)

                if s.nextBlockSize == 0:
                    if s.bytesAvailable() < SIZEOF_UINT32:
                        return
                    size = stream.readUInt32()
                    print("size", size)
                    s.nextBlockSize = size
                if s.bytesAvailable() < s.nextBlockSize:
                    return


                header = stream.readUInt32()

                print("header", header)

                if header == 0: # QString
                    textFromClient = stream.readQString()
                    print(f"received '{textFromClient}' from {s}")

                    answer = textFromClient + " Back at you!"

                    if "CLOSE" in textFromClient:
                        self.parent.quit()

                if header == 1: # QImage
                    img_bytes = stream.readBytes()
                    img = QImage()
                    img.loadFromData(img_bytes)
                    img.save("serverQt.jpg")
                    print(f"received an image from {s}")

                    answer = "image saved in the server on serverQt.jpg"

                s.nextBlockSize = 0

            # BACK AT CLIENT
                self.sendMessage(answer, s)
                s.nextBlockSize = 0
Example #20
0
 def readMessage(self):
     stream = QDataStream(self.tcpSocket)
     stream.setVersion(QDataStream.Qt_5_4)
     while self.tcpSocket.bytesAvailable() > SIZEOF_HEAD_INT:
         if self.headSize == 0:
             self.headSize = stream.readInt64()
             # fileBytes=stream.readInt64()
             # self.bytesReceive+=SIZEOF_HEAD_INT
         if self.tcpSocket.bytesAvailable() >= self.headSize:
             qheader = stream.readQString()
             # print("client recv head:",qheader)
             # self.bytesReceive += self.headSize
             self.handlerMessage(qheader)
             self.initRecv()
         else:
             break
Example #21
0
 def dropEvent(self, event):
     if event.mimeData().hasFormat("application/x-icon-and-text"):
         data = event.mimeData().data("application/x-icon-and-text")
         stream = QDataStream(data, QIODevice.ReadOnly)
         text = ""
         icon = QIcon()
         text = stream.readQString()
         stream >> icon
         self.dropAction = Qt.MoveAction
         item = QListWidgetItem(text, self)
         item.setIcon(icon)
         event.setDropAction(self.dropAction)
         event.accept()
         self.update()
         return
     self.update()
     event.ignore()
Example #22
0
    def slot_receive(self):
        print("recv")
        min_block_size = SIZE_OF_UINT16
        while self.state() == QAbstractSocket.ConnectedState:
            stream = QDataStream(self)

            if self.bytesAvailable() >= min_block_size:
                nextblock_size = stream.readUInt16()

            else:
                break
            if nextblock_size < min_block_size:
                break
            # Event_id = stream.readQString()
            Event_msg = stream.readQString()
            print(Event_msg)
            self.sign_recv.emit(Event_msg)
Example #23
0
    def readResponse(self):  # 收命令,要做的事情,

        stream = QDataStream(self.socket)
        print('--------------------')
        print('服务器响应')
        stream.setVersion(QDataStream.Qt_5_7)

        while True:
            self.nextBlockSize = 0
            if self.nextBlockSize == 0:
                if self.socket.bytesAvailable() < SIZEOF_UINT16:
                    print('没有内容了')
                    break
                self.nextBlockSize = stream.readUInt16()

            else:
                print('错误')  # 客户端主动断开时,去掉字典中的对应,在这里做一部分操作。
                # 客户端主动断开的时候,要将其从self.myParent.sockeIdToSocketDict   self.myParent.fixIdToSocketIdDict 中删掉

                break
            if self.socket.bytesAvailable() < self.nextBlockSize:
                print("错误2")
                if (not self.socket.waitForReadyRead(60000)
                        or self.socket.bytesAvailable() < self.nextBlockSize):
                    break
            state = stream.readQString()  # 读命令         sendModel
            print('state==' + state)
            if state == 'SENDFILE':
                filename = stream.readQString()  # 读文件名
                fileSize = stream.readInt()  # 读文件大小
                with open('../TEST/' + filename, 'ab') as f:
                    while self.nextBlockSize > 0:
                        fileBytes = stream.readBytes()  # 读文件部分字节
                        f.write(fileBytes)

                        print(fileBytes.__len__())
                        self.nextBlockSize = stream.readUInt64()
                        print('self.nextBlockSize:' + str(self.nextBlockSize))
                        state = stream.readQString()
                        filename = stream.readQString()  # 读文件名
                        fileSize = stream.readInt()  # 读文件大小
                        print('filename:' + filename)
                        print('fileSize:' + str(fileSize))

            elif state == 'test':
                print(stream.readQString())

            elif state == 'ORDER':  # 收到一条命令      要执行的命令
                order = stream.readQString()  # 读是什么命令
                if order:  # shou dao doThing
                    self.doSomeThing.emit(order)
Example #24
0
    def slot_readyRead(self):
        # 定义最小接受长度
        print("come")
        min_block_size = SIZE_OF_UINT16

        while self.state() == QAbstractSocket.ConnectedState:
            stream = QDataStream(self)
            # 如果可接受字符串比这个更小就直接丢弃
            if self.bytesAvailable() >= min_block_size:
                # 读取接下来信息流的长度,因为信息流第一个位置写入的是长度,为UInt16类型
                nextblock_size = stream.readUInt16()
            else:
                break
            # 如果 nextblock_size 比这个还小说明接受错误
            if nextblock_size <= min_block_size:
                break
            # event_id = stream.readQString()
            event_msg = stream.readQString()
            self.sign_recv.emit(event_msg)
Example #25
0
    def dropEvent(self, event):
        if event.mimeData().hasFormat(fridgeMagnetsMimeType()):
            mime = event.mimeData()
            itemData = mime.data(fridgeMagnetsMimeType())
            dataStream = QDataStream(itemData, QIODevice.ReadOnly)

            dataStream.startTransaction()
            text = dataStream.readQString()
            offset = QPoint()
            dataStream >> offset

            newLabel = DragLabel(text, self)
            newLabel.move(event.pos() - offset)
            newLabel.show()
            # Apparently `WA_DeleteOnClose` shouldn't be used with python.
            # See https://stefanoborini.com/pyqt-gotchas/
            # newLabel.setAttribute(Qt.WA_DeleteOnClose)

            if event.source() == self:
                event.setDropAction(Qt.MoveAction)
                event.accept()
            else:
                event.acceptProposedAction()

        elif event.mimeData().hasText():
            pieces = event.mimeData().text().split()
            pos = event.pos()

            for text in pieces:
                newLabel = DragLabel(text, self)
                newLabel.move(pos)
                newLabel.show()
                # Apparently `WA_DeleteOnClose` shouldn't be used with python.
                # See https://stefanoborini.com/pyqt-gotchas/
                # newLabel.setAttribute(Qt.WA_DeleteOnClose)

                pos += QPoint(newLabel.width(), 0)

            event.acceptProposedAction()

        else:
            event.ignore()
Example #26
0
    def readFortune(self):
        ins = QDataStream(self.socket)
        ins.setVersion(QDataStream.Qt_4_0)

        if self.blockSize == 0:
            if self.socket.bytesAvailable() < 2:
                return
            self.blockSize = ins.readUInt16()

        if ins.atEnd():
            return

        nextFortune = ins.readQString()
        if nextFortune == self.currentFortune:
            QTimer.singleShot(0, self.requestNewFortune)
            return

        self.currentFortune = nextFortune
        self.statusLabel.setText(self.currentFortune)
        self.getFortuneButton.setEnabled(True)
Example #27
0
    def load(self, device):
        self.m_frames = []

        stream = QDataStream(device)
        self.m_name = stream.readQString()
        frameCount = stream.readInt()

        for i in range(frameCount):
            nodeCount = stream.readInt()

            frame = Frame()
            frame.setNodeCount(nodeCount)

            for j in range(nodeCount):
                pos = QPointF()
                stream >> pos

                frame.setNodePos(j, pos)

            self.m_frames.append(frame)
Example #28
0
    def readData(self):
        instr = QDataStream(self.tcpSocket)
        raw_data = instr.readQString()

        if raw_data != "":
            self.writeData()
            self.update()

        data = raw_data.split("p")

        if len(data) > 1:
            del data[0]
            self.game_data = data

        diff = len(data) - self.player_count

        if diff > 0:
            for i in range(0, diff):
                self.spawnPlayer()
                self.player_count += 1
Example #29
0
    def load(self, device):
        self.m_frames = []

        stream = QDataStream(device)
        self.m_name = stream.readQString()
        frameCount = stream.readInt()

        for i in range(frameCount):
            nodeCount = stream.readInt()

            frame = Frame()
            frame.setNodeCount(nodeCount)

            for j in range(nodeCount):
                pos = QPointF()
                stream >> pos

                frame.setNodePos(j, pos)

            self.m_frames.append(frame)
    def readFortune(self):
        ins = QDataStream(self.socket)
        ins.setVersion(QDataStream.Qt_4_0)

        if self.blockSize == 0:
            if self.socket.bytesAvailable() < 2:
                return
            self.blockSize = ins.readUInt16()

        if ins.atEnd():
            return

        nextFortune = ins.readQString()
        if nextFortune == self.currentFortune:
            QTimer.singleShot(0, self.requestNewFortune)
            return

        self.currentFortune = nextFortune
        self.statusLabel.setText(self.currentFortune)
        self.getFortuneButton.setEnabled(True)
Example #31
0
    def readFromServer(self):
        stream = QDataStream(self)
        stream.setVersion(QDataStream.Qt_4_9)

        while True:
            if self.nextBlockSize == 0:
                if self.bytesAvailable() < self.SIZEOF_UINT32:
                    break
                self.nextBlockSize = stream.readUInt32()
            if self.bytesAvailable() < self.nextBlockSize:
                break

            header = stream.readUInt32()
            print("header", header)
            if header == 0:  # QString
                textFromServer = stream.readQString()

                # print("messageReceived:", textFromServer)
                print(f"received '{textFromServer}' from Server")

                self.messageReceived.emit("[RECEIVED] " + textFromServer)
                self.nextBlockSize = 0
Example #32
0
    def showMessage(self):
        stream = QDataStream(
            self.tcpSocket)  # 发送数据是以QByteArray数据类型发送过来的,所以接收数据也应该以此接收
        stream.setVersion(QDataStream.Qt_5_10)  # 发送和接收数据以相同的编码形式传输
        self.message = stream.readQString(
        )  # 写入使用writeString, 对应读取使用readQString
        self.ui.showText.append(
            '%s   %s' %
            (self.message,
             time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))))
        message_list = self.message.split(',')

        self.radio = message_list[3][3:]
        self.x1 = message_list[4][3:]
        self.y1 = message_list[5][3:]
        self.x2 = message_list[6][3:]
        self.y2 = message_list[7][3:]

        self.R = message_list[-3][3:]
        self.G = message_list[-2][3:]
        self.B = message_list[-1][3:]
        print(message_list)
    def run(self):
        self.mutex.lock()
        serverName = self.hostName
        serverPort = self.port
        self.mutex.unlock()

        while not self.quit:
            Timeout = 5 * 1000

            socket = QTcpSocket()
            socket.connectToHost(serverName, serverPort)

            if not socket.waitForConnected(Timeout):
                self.error.emit(socket.error(), socket.errorString())
                return

            while socket.bytesAvailable() < 2:
                if not socket.waitForReadyRead(Timeout):
                    self.error.emit(socket.error(), socket.errorString())
                    return 

            instr = QDataStream(socket)
            instr.setVersion(QDataStream.Qt_4_0)
            blockSize = instr.readUInt16()

            while socket.bytesAvailable() < blockSize:
                if not socket.waitForReadyRead(Timeout):
                    self.error.emit(socket.error(), socket.errorString())
                    return

            self.mutex.lock()
            fortune = instr.readQString()
            self.newFortune.emit(fortune)

            self.cond.wait(self.mutex)
            serverName = self.hostName
            serverPort = self.port
            self.mutex.unlock()