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)
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)