Example #1
0
    def send(self, m_client, data):

        key = m_client.property("key")

        # self.__logger.info("send message to client [{0}]".format(key))
        block = QtCore.QByteArray()
        stream = QtCore.QDataStream(block, QtCore.QIODevice.WriteOnly)
        stream.setVersion(QtCore.QDataStream.Qt_4_7)
        stream.writeUInt64(0)
        stream << QtCore.QByteArray(data)
        stream.device().seek(0)
        stream.writeUInt64(block.size() - ctypes.sizeof(ctypes.c_long))
        stream.device().seek(block.size())
        stream.writeUInt64(0)

        s = 0
        while s < block.size():
            if m_client.state() != QtNetwork.QAbstractSocket.ConnectedState:
                m_client.warning(
                    "is not connected to server [{0}]".format(key))
                break

            w = m_client.write(block)
            s += w
Example #2
0
    def __received(self, m_client):

        key = m_client.property("key")

        # self.__logger.info("receive message from client  [{0}]".format(key))
        stream = QtCore.QDataStream(m_client)
        stream.setVersion(QtCore.QDataStream.Qt_4_7)

        if key in self.__client_data:
            while True:
                if not self.__client_data[key][1]:
                    if m_client.bytesAvailable() < ctypes.sizeof(
                            ctypes.c_long):
                        break

                    self.__client_data[key][1] = stream.readUInt64()

                if m_client.bytesAvailable() < self.__client_data[key][1]:
                    break

                if self.__client_data[key][2] is None:
                    self.__client_data[key][2] = QtCore.QByteArray()
                    self.__client_data[key][3] = QtCore.QDataStream(
                        self.__client_data[key][2], QtCore.QIODevice.ReadWrite)
                    self.__client_data[key][3].setVersion(
                        QtCore.QDataStream.Qt_4_7)
                    self.__client_data[key][3].writeUInt64(
                        self.__client_data[key][1])

                data = QtCore.QByteArray()
                stream >> data

                if self.__client_data[key][1]:
                    self.__client_data[key][3] << data
                    if self.__client_data[key][2].size() - ctypes.sizeof(
                            ctypes.c_long) == self.__client_data[key][1]:
                        self.__client_data[key][3].device().seek(0)
                        size = self.__client_data[key][3].readUInt64()
                        message = QtCore.QByteArray()
                        self.__client_data[key][3] >> message

                        self.__client_data[key][2] = None
                        self.__client_data[key][3] = None
                        self.__client_data[key][1] = 0

                        # system = 0
                        if message[:7] == "system:":
                            # system = 1

                            if message[:11] == "system:key:" and message.size(
                            ) == 47:
                                try:
                                    replace_key = uuid.UUID(str(message[11:]))

                                except:
                                    replace_key = key

                                if key != replace_key:
                                    # self.__logger.info("update client key from " + repr(key) + " to " + repr(replace_key))
                                    self.__client_data[
                                        replace_key] = self.__client_data[key]
                                    del self.__client_data[key]
                                    key = replace_key

                            elif message == "system:stop":
                                self.stop()

                        # if system:
                        #     self.__logger.info("received system message from client with size " + repr(size) + " [{0}]".format(key))

                        else:
                            # self.__logger.info("received message from client with size " + repr(size) + " [{0}]".format(key))
                            self.received.emit(m_client, message)
Example #3
0
    def __received(self):

        # self.__logger.info("receive message from server [{0}]".format(self.__key))
        if self.__client:
            stream = QtCore.QDataStream(self.__client)
            stream.setVersion(QtCore.QDataStream.Qt_4_7)

            while True:
                if not self.__client:
                    break

                if not self.__blocksize:
                    if self.__client.bytesAvailable() < ctypes.sizeof(
                            ctypes.c_long):
                        break

                    self.__blocksize = stream.readUInt64()

                if self.__client.bytesAvailable() < self.__blocksize:
                    break

                if self.__blocksize and self.__blockdata is None:
                    self.__blockdata = QtCore.QByteArray()
                    self.__blockstream = QtCore.QDataStream(
                        self.__blockdata, QtCore.QIODevice.ReadWrite)
                    self.__blockstream.setVersion(QtCore.QDataStream.Qt_4_7)
                    self.__blockstream.writeUInt64(self.__blocksize)

                data = QtCore.QByteArray()
                stream >> data

                if self.__blocksize:
                    self.__blockstream << data
                    if self.__blockdata.size() - ctypes.sizeof(
                            ctypes.c_long) == self.__blocksize:
                        self.__blockstream.device().seek(0)
                        size = self.__blockstream.readUInt64()
                        message = QtCore.QByteArray()
                        self.__blockstream >> message

                        self.__blockdata = None
                        self.__blocksize = 0
                        self.__blockstream = 0

                        # system = 0
                        if message[:7] == "system:":
                            # system = 1
                            if message[:11] == "system:key:" and message.size(
                            ) == 47:
                                self.__key = None
                                try:
                                    self.__key = uuid.UUID(str(message[11:]))

                                except:
                                    self.stop()

                            elif self.__key is None:
                                self.stop()

                            elif message == "system:stop":
                                self.stop()

                        # if system:
                        # self.__logger.info("received system message from server with size " + repr(size) + " [{0}]".format(self.__key))

                        else:
                            # self.__logger.info("received message from server with size " + repr(size) + " [{0}]".format(self.__key))
                            self.received.emit(message)