class UdpServer(QObject): datagram = pyqtSignal(str) def __init__(self, host): super().__init__() self._sock = QUdpSocket() self._host = host self._log = logging.getLogger("udp") self._sock.readyRead.connect(self.recv) bind(self._sock) def set_host(self, host): self._host = host @pyqtSlot(str) def try_connect(self, port): self._sock.disconnectFromHost() if self._sock.state() != QAbstractSocket.UnconnectedState: self._sock.waitForDisconnected() port = int(port) msg = "connecting to ({}:{})" msg = msg.format(self._host.toString(), port) self._log.debug(msg) self._sock.connectToHost(self._host, port) self._sock.write("_:start\n") def recv(self): while self._sock.hasPendingDatagrams(): data = self._sock.readDatagram(BUFFER_SIZE) data = data[0] message = data.decode() for line in message.split("\n"): if line == "": continue self.datagram.emit(line)
class UdpServer(QObject): datagram = pyqtSignal(str) def __init__(self, host): super().__init__() self._sock = QUdpSocket() self._host = host self._log = logging.getLogger('udp') self._sock.readyRead.connect(self.recv) bind(self._sock) def set_host(self, host): self._host = host @pyqtSlot(str) def try_connect(self, port): self._sock.disconnectFromHost() if self._sock.state() != QAbstractSocket.UnconnectedState: self._sock.waitForDisconnected() port = int(port) msg = 'connecting to ({}:{})' msg = msg.format(self._host.toString(), port) self._log.debug(msg) self._sock.connectToHost(self._host, port) self._sock.write('_:start\n') def recv(self): while self._sock.hasPendingDatagrams(): data = self._sock.readDatagram(BUFFER_SIZE) data = data[0] message = data.decode() for line in message.split('\n'): if line == '': continue self.datagram.emit(line)
class UdpDevice(DataDevice): ''' Implementation of a UDP server socket ''' readyRead = pyqtSignal() def __init__(self, params={}, parent=None): ''' Constructor ''' super(UdpDevice, self).__init__(params, parent) self.iodevice = QUdpSocket() self.reconnect = int(params.get('Reconnect', 1000)) self.host = params.get('Host', None) self.port = int(params.get('Port', 2000)) self.iodevice.readyRead.connect(self.readyRead) self.buffer = list() def connectDevice(self): result = False if self.host is None: result = self.iodevice.bind(self.port) else: ha = QHostAddress(self.host) result = self.iodevice.bind(ha, self.port) if result is False: if self.reconnect > 0: QTimer.singleShot(self.reconnect, self.onReconnectTimer) else: self.deviceConnected.emit(True) def disconnectDevice(self): if self.iodevice.state() is QAbstractSocket.BoundState: self.iodevice.disconnectFromHost() self.deviceDisconnected.emit(True) def readData(self): (data, ha, port) = self.iodevice.readDatagram( self.iodevice.pendingDatagramSize()) self.remoteHost = ha.toString() self.remotePort = port return data def readLine(self): if self.iodevice.hasPendingDatagrams(): self.buffer.extend(self.readData()) try: i = self.buffer.index('\n') data = self.buffer[0:i] del self.buffer[0:i + 1] return ''.join(data) except ValueError: return ''
class UdpDevice(DataDevice): ''' Implementation of a UDP server socket ''' readyRead = pyqtSignal() def __init__(self, params={}, parent=None): ''' Constructor ''' super(UdpDevice, self).__init__(params, parent) self.iodevice = QUdpSocket() self.reconnect = int(params.get('Reconnect', 1000)) self.host = params.get('Host', None) self.port = int(params.get('Port', 2000)) self.iodevice.readyRead.connect(self.readyRead) self.buffer = list() def connectDevice(self): result = False if self.host is None: result = self.iodevice.bind(self.port) else: ha = QHostAddress(self.host) result = self.iodevice.bind(ha, self.port) if result is False: if self.reconnect > 0: QTimer.singleShot(self.reconnect, self.onReconnectTimer) else: self.deviceConnected.emit(True) def disconnectDevice(self): if self.iodevice.state() is QAbstractSocket.BoundState: self.iodevice.disconnectFromHost() self.deviceDisconnected.emit(True) def readData(self): (data, ha, port) = self.iodevice.readDatagram(self.iodevice.pendingDatagramSize()) self.remoteHost = ha.toString() self.remotePort = port return data def readLine(self): if self.iodevice.hasPendingDatagrams(): self.buffer.extend(self.readData()) try: i = self.buffer.index('\n') data = self.buffer[0:i] del self.buffer[0:i + 1] return ''.join(data) except ValueError: return ''