コード例 #1
0
    def send_message(self, data, is_job_data):
        # Socket was closed, re-connect
        host, port = self.address
        sock = Ncat(host, port, socket_timeout=self.timeout)

        LOGGER.debug('Connecting to socket.')
        sock.connect()
        LOGGER.debug('Sending data on socket.')
        sock.send(data)

        if is_job_data:
            # Receive JSON dict data or empty byte object
            response = sock.receive_job_data(timeout=self.timeout,
                                             end=b'End-Of-Job-Data')
        else:
            # Receive string or empty string
            response = sock.receive_short_timeout(timeout=self.timeout)

        # Close socket, server will only respond once
        sock.close()

        # Empty response means nothing received, None response means connection lost
        if response is None:
            self.not_responding.emit()
            return
        else:
            self.enable_send_btn.emit()

        if is_job_data:
            self.job_data_result.emit(response)
        else:
            self.result.emit(response)
コード例 #2
0
class SocketSendMessage(QtCore.QThread):
    result = QtCore.pyqtSignal(str)
    job_data_result = QtCore.pyqtSignal(object)
    enable_send_btn = QtCore.pyqtSignal()
    not_responding = QtCore.pyqtSignal()

    green_on = QtCore.pyqtSignal()
    green_off = QtCore.pyqtSignal()
    yellow_on = QtCore.pyqtSignal()
    yellow_off = QtCore.pyqtSignal()

    timeout = 10

    def __init__(self, address, message_queue):
        super(SocketSendMessage, self).__init__()
        self.address = address
        self.sock = None
        self.msg_queue = message_queue

    def run(self):
        while not self.isInterruptionRequested():
            msg, is_job_data = self.msg_queue.get()
            if msg == 'EndThread':
                break
            self.send_message(msg, is_job_data)

        LOGGER.debug('Send thread ended.')

    def send_message(self, data, is_job_data):
        # Socket was closed, re-connect
        host, port = self.address
        self.sock = Ncat(host, port, socket_timeout=self.timeout)
        # Connect NC signals to LED's
        self.sock.signals.send_start.connect(self.green_on)
        self.sock.signals.send_end.connect(self.green_off)
        self.sock.signals.recv_start.connect(self.yellow_on)
        self.sock.signals.recv_end.connect(self.yellow_off)
        self.sock.signals.connect_start.connect(self.green_on)
        self.sock.signals.connect_end.connect(self.green_off)

        self.sock.connect()

        self.sock.send(data)

        if is_job_data:
            # Receive JSON dict data or empty byte object
            response = self.sock.receive_job_data(timeout=self.timeout,
                                                  end=b'End-Of-Job-Data')
        else:
            # Receive string or empty string
            response = self.sock.receive_short_timeout(timeout=self.timeout)

        # Close socket, server will only respond once
        self.sock.close()

        # Empty response means nothing received, None response means connection lost
        if response is None:
            self.not_responding.emit()
            return
        else:
            self.enable_send_btn.emit()

        if is_job_data:
            self.job_data_result.emit(response)
        else:
            self.result.emit(response)