示例#1
0
文件: pod.py 项目: phch/one-loop
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)
示例#2
0
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)
示例#3
0
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 ''
示例#4
0
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 ''