示例#1
0
class UdpTx(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.setWindowTitle("UDP Transmit")
        self.setWindowIcon(QIcon("g-square.png"))

        self.us = QUdpSocket(self)
        self.host = QHostAddress(QHostAddress.LocalHost)
        self.port = 5000

        self.us.bytesWritten.connect(self.udpSent)

        send = QPushButton("&Send")
        send.clicked.connect(self.udpSend)

        self.datagram = QLineEdit()
        self.datagram.returnPressed.connect(self.udpSend)

        l = QVBoxLayout()
        l.addWidget(self.datagram)
        l.addWidget(send)

        self.setLayout(l)

    def udpSend(self):
        print self.us.writeDatagram(self.datagram.text(), self.host, self.port)

    def udpSent(self):
        print "Datagram sent"
示例#2
0
文件: relay.py 项目: wolfmic/client
class Relay(QObject):
    bound = pyqtSignal(int)

    def __init__(self, game_port, login, peer_id, recv):
        QObject.__init__(self)
        self._logger.info("Allocating local relay for {}, {}".format(
            login, peer_id))
        self._socket = QUdpSocket()
        self._socket.stateChanged.connect(self._state_changed)
        self._socket.readyRead.connect(self._ready_read)
        self.game_port = game_port
        self.login, self.peer_id = login, peer_id
        self.recv = recv

    def listen(self):
        self._socket.bind()

    def send(self, message):
        self._logger.debug("game at 127.0.0.1:{}<<{} len: {}".format(
            self.game_port, self.peer_id, len(message)))
        self._socket.writeDatagram(message, QHostAddress.LocalHost,
                                   self.game_port)

    def _state_changed(self, state):
        if state == QUdpSocket.BoundState:
            self.bound.emit(self._socket.localPort())

    def _ready_read(self):
        while self._socket.hasPendingDatagrams():
            data, host, port = self._socket.readDatagram(
                self._socket.pendingDatagramSize())
            self._logger.debug("{}>>{}/{}".format(self._socket.localPort(),
                                                  self.login, self.peer_id))
            self.recv(data)
示例#3
0
class SocketUdp(AbstractSocket):
    """Socket que envia e recebe dados via QUdpSocket"""
    def __init__(self, portaReceber, portaResponder, parent=None):
        super().__init__(portaReceber, portaResponder, parent)

        self._socketClient = QUdpSocket()
        self._socketClient.bind(self.getPortaReceber())

        self._socketClient.readyRead.connect(self._lerDados)

    def _lerDados(self):
        """Lê os dados que foram enviados para a portaReceber e emite o sinal dadosRecebidos"""
        while self._socketClient.hasPendingDatagrams():
            data, host, _port = self._socketClient.readDatagram(self._socketClient.pendingDatagramSize())
            
            self._readDatagram(host.toString(), data)
            
    def _readDatagram(self, ip, data):
        self.dadosRecebidos.emit(ip, data)
        
    def enviarDados(self, byteArray):
        """Envia os dados via socketUdp para ip e porta pré-determinados
           @param byteArray: Dados que serão enviados"""
        if not self.getPara():
            self._lancarExcecaoParaNaoDefinido()
        
        self._writeDatagram(byteArray)

    def _writeDatagram(self, data):
        self._socketClient.writeDatagram(data, QHostAddress(self.getPara()), self.getPortaResponder())
示例#4
0
class QUdpTransport(Transport):
    '''A Transport sending and receiving UDP datagrams.
    
    Connectionless - sender/receiver are IP addresses. Sending and receiving is 
    done on the same port. Sending with receiver=None makes a broadcast.
    
    Use messages > 500 Byte at your own peril.
    
    Received data is processed on the Qt mainloop thread.
    '''
    shorthand='qudp'
    @classmethod
    def fromstring(cls, expression):
        '''qudp:<port>'''
        _, port = expression.split(':')
        return cls(port=int(port))

    def __init__(self, port):
        self.port = port
        self.leftover = b''
        self.socket = QUdpSocket()
        self.socket.readyRead.connect(self.on_ready_read)
        self.socket.error.connect(self.on_error)

    def start(self):
        if self.socket.state() != QAbstractSocket.UnconnectedState:
            L().debug('QUdpSocket.start(): Socket is not in UnconnectedState, doing nothing')
            return
        L().debug('QUdpTransport: binding to port %d'%(self.port,))
        self.socket.bind(self.port, QUdpSocket.ShareAddress)
        
    def stop(self):
        self.socket.flush()
        self.socket.close()

    def send(self, data, receivers=None):
        L().debug('message to udp %s: %s'%(receivers,data))
        data = data.decode('utf8')
        if receivers:
            for receiver in receivers:
                self.socket.writeDatagram(data, QHostAddress(receiver), self.port)
        else:
            self.socket.writeDatagram(data, QHostAddress.Broadcast, self.port)

    def on_ready_read(self):
        while self.socket.hasPendingDatagrams():
            data, host, port = self.socket.readDatagram(self.socket.pendingDatagramSize())
            assert isinstance(data, bytes)
            sender = host.toString()
            pdata = data
            if len(pdata) > 100:
                pdata = pdata[:100] + b'...'
            L().debug('UDP message from %s: %s'%(sender, pdata))
            self.leftover = self.received(
                sender=sender,
                data=self.leftover + data
            )

    def on_error(self, error):
        L().info('QTcpSocket raised error: %s'%error)
示例#5
0
文件: relay.py 项目: Arkonen8/client
class Relay(QObject):
    bound = pyqtSignal(int)

    def __init__(self, game_port, login, peer_id, recv):
        QObject.__init__(self)
        self._logger.info("Allocating local relay for {}, {}".format(login, peer_id))
        self._socket = QUdpSocket()
        self._socket.stateChanged.connect(self._state_changed)
        self._socket.readyRead.connect(self._ready_read)
        self.game_port = game_port
        self.login, self.peer_id = login, peer_id
        self.recv = recv

    def listen(self):
        self._socket.bind()

    def send(self, message):
        self._logger.debug("game at 127.0.0.1:{}<<{} len: {}".format(self.game_port, self.peer_id, len(message)))
        self._socket.writeDatagram(message, QHostAddress.LocalHost, self.game_port)

    def _state_changed(self, state):
        if state == QUdpSocket.BoundState:
            self.bound.emit(self._socket.localPort())

    def _ready_read(self):
        while self._socket.hasPendingDatagrams():
            data, host, port = self._socket.readDatagram(self._socket.pendingDatagramSize())
            self._logger.debug("{}>>{}/{}".format(self._socket.localPort(), self.login, self.peer_id))
            self.recv(data)
示例#6
0
class UdpTx(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.setWindowTitle("UDP Transmit")
        self.setWindowIcon(QIcon('g-square.png'))

        self.us=QUdpSocket(self)
        self.host=QHostAddress(QHostAddress.LocalHost)
        self.port=5000

        self.us.bytesWritten.connect(self.udpSent)

        send=QPushButton("&Send")
        send.clicked.connect(self.udpSend)

        self.datagram=QLineEdit()
        self.datagram.returnPressed.connect(self.udpSend)

        l=QVBoxLayout()
        l.addWidget(self.datagram)
        l.addWidget(send)

        self.setLayout(l)

    def udpSend(self):
        print self.us.writeDatagram(self.datagram.text(), self.host, self.port)

    def udpSent(self):
        print "Datagram sent"
示例#7
0
class PsyQtChaoscClientBase(PsyQtClientBase):
    def __init__(self):
        super(PsyQtChaoscClientBase, self).__init__()
        self.osc_sock = QUdpSocket(self)
        logger.info("osc bind localhost %d", self.args.client_port)
        self.osc_sock.bind(QHostAddress(self.args.client_host),
                           self.args.client_port)
        self.osc_sock.readyRead.connect(self.got_message)
        self.osc_sock.error.connect(self.handle_osc_error)
        self.subscribe()

    def sigint_handler(self, ex_cls, ex, tb):
        """Handler for the SIGINT signal."""
        logger.info("sigint_handler")
        if ex_cls == KeyboardInterrupt:
            logger.info("found KeyboardInterrupt")
            self.unsubscribe()
            QtGui.QApplication.exit()
        else:
            logger.critical(''.join(traceback.format_tb(tb)))
            logger.critical('{0}: {1}'.format(ex_cls, ex))

    def sigterm_handler(self, *args):
        logger.info("sigterm_handler")
        self.unsubscribe()
        QtGui.QApplication.exit()

    def subscribe(self):
        logger.info("subscribe")
        msg = OSCMessage("/subscribe")
        logger.info(self.args.client_host)
        msg.appendTypedArg(self.args.client_host, "s")
        msg.appendTypedArg(self.args.client_port, "i")
        msg.appendTypedArg(self.args.authenticate, "s")
        if self.args.subscriber_label is not None:
            msg.appendTypedArg(self.args.subscriber_label, "s")
        self.osc_sock.writeDatagram(QByteArray(msg.encode_osc()),
                                    QHostAddress(self.args.chaosc_host),
                                    self.args.chaosc_port)

    def unsubscribe(self):
        logger.info("unsubscribe")
        msg = OSCMessage("/unsubscribe")
        msg.appendTypedArg(self.args.client_host, "s")
        msg.appendTypedArg(self.args.client_port, "i")
        msg.appendTypedArg(self.args.authenticate, "s")
        self.osc_sock.writeDatagram(QByteArray(msg.encode_osc()),
                                    QHostAddress(self.args.chaosc_host),
                                    self.args.chaosc_port)

    def handle_osc_error(self, error):
        logger.info("osc socket error %d", error)

    def closeEvent(self, event):
        logger.info("closeEvent", event)
        self.unsubscribe()
        event.accept()
示例#8
0
文件: main.py 项目: irasoulpour/lchat
class MyWidgetchat(QWidget):
    def __init__(self,parent=None):
        super(MyWidgetchat,self).__init__(parent)
        self.ui = Ui_FormChat()
        self.ui.setupUi(self)
        self.sock = QUdpSocket()
        self.ui.textEdit_chat.setStyleSheet("font: 11pt ;")
        self.connect(self.ui.pb_sendChat,PyQt4.QtCore.SIGNAL("clicked()"),self.sendChat)
        self.connect(self.ui.pb_ding,PyQt4.QtCore.SIGNAL("clicked()"),self.dingT)
        self.connect(self.ui.pb_cleareChat,PyQt4.QtCore.SIGNAL("clicked()"),self.clearChatT)
        self.connect(self.ui.pb_connect,PyQt4.QtCore.SIGNAL("clicked()"),self.binds)
        self.connect(self.sock,PyQt4.QtCore.SIGNAL("readyRead()"),self.readPaygam)
    def binds(self):
        #1024 < port < 65535
        myip=QHostAddress(self.ui.le_my_ip.text())
        myport=int(self.ui.le_my_port.text())
        if self.sock.bind(myip,myport):
            QMessageBox.information(self,"","connected :)")
        else:
            QMessageBox.information(self,"","not connected  :(")
    def sendChat(self):
        payam=self.ui.le_matnChat.text()
        namekarbar=self.ui.lineEdit_3.text()
        messageForsend="%s  : %s"%(namekarbar,payam)
        messageForsend1=messageForsend.encode('utf-8')
        self.ui.textEdit_chat.append(messageForsend)
        self.ui.le_matnChat.clear()
        #---------
        yport=int(self.ui.le_yorport.text())
        yip = QHostAddress(self.ui.le_yorip.text())
        self.sock.writeDatagram(messageForsend1,yip,yport)
        
    def dingT(self):
        namekarbar=self.ui.lineEdit_3.text()
        payamepishin=self.ui.textEdit_chat.toPlainText()
        messagekol="%s \n %s  : ding"%(payamepishin,namekarbar)
        self.ui.textEdit_chat.setText(messagekol)
    def clearChatT(self):
        self.ui.textEdit_chat.clear()    
    def readPaygam(self):
        #if(sock.hasPendingDatagrams()
        ds = self.sock.pendingDatagramSize()
        msg = self.sock.readDatagram(ds)
        #msg[0] payam - 1 ip - 2 port
        #print("message is : ",msg[0]," host : ",str(msg[1].toString())," port : ",str(msg[2]))
        
        payamamade=str(msg[0].decode('utf-8'))
        messagekolamade="%s"%(payamamade)
        self.ui.textEdit_chat.append(messagekolamade)
示例#9
0
class UdpSocket(QObject):
    def __init__(self, parent=None):
        QObject.__init__(self, parent)

        self.__socket = QUdpSocket(self)
        self.__socket.readyRead.connect(self.__onReadyRead)

        self.__on_read = None
        self.__port = None

        ips = []  # gel all the local IP-addresses
        addresses = QNetworkInterface.allAddresses()
        for address in addresses:

            match = re.match("(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", str(address.toString()))
            if match:
                ip = match.group(0)
                if "127.0.0.1" == ip or "0.0.0.0" == ip:
                    continue

                ips.append(ip)

        self.__ips = ips

    def __onReadyRead(self):
        while self.__socket.hasPendingDatagrams():
            size = self.__socket.pendingDatagramSize()
            data, host, port = self.__socket.readDatagram(size)

            host = str(host.toString())

            if host in self.__ips:  # if the datagram comes from the local IP, we simply ignore it
                return

            source = (host, port)

            if self.__on_read:
                self.__on_read(source, data)

    def __read(self, callback):
        self.__on_read = callback

    def bind(self, port):
        self.__port = port
        self.__socket.bind(self.__port, QUdpSocket.ShareAddress)

    def write(self, data):
        if None == self.__port:
            return -1

        return self.__socket.writeDatagram(data, QHostAddress.Broadcast, self.__port)

    onRead = property(fset=__read)
class SocketThread(QThread):
    def __init__(self,parent=None):
        super(SocketThread,self).__init__(parent)
        self.clientuuid = str(uuid.uuid4())
        self.list = []
        self.timetemp = ""
        self.msginfo = QByteArray()
        self.port = 5555
        self.broadFlag = True
        self.startReceive = False
        self.porttwo = 5556
        
        self.datagramcount = 40
        
        self.datanum = 0
        self.datareceivenum = 0
        self.localframenum = 0
        self.avilableframenum = 0
        self.necnum = 0
        
        self.framedata = {}
        self.framelist = {}
        self.framedatalist = []
        self.currentframe = ""
        
        self.dataframelist = {}
        
        self.teacherIp = ""
        #self.slotTimer = QTimer()
        #self.slotTimer.start(3000)
        #self.connect(self.slotTimer, SIGNAL("timeout()"),self.writeDataToSocket)
        
        
        self.udpSocket = QUdpSocket(self)
        #self.udpSocket.setReadBufferSize(1024*1024*2)
        self.udpSocket.setReadBufferSize(1024*1024)
        
        self.connect(self.udpSocket,SIGNAL("readyRead()"),self.dataReceived)
        result = self.udpSocket.bind(self.port)
        
        if not result:
             pass 
        self.mcast_addr_two = QHostAddress("224.0.0.18")
        self.udpSocketTwo = QUdpSocket(self)
        self.udpSocketTwo.setReadBufferSize(1024)
        self.connect(self.udpSocketTwo,SIGNAL("readyRead()"),self.dataReceiveTwo)
        result = self.udpSocketTwo.bind(self.porttwo)
        self.udpSocketTwo.joinMulticastGroup(self.mcast_addr_two)
        if not result:
             pass 
        self.mcast_addr_own = QHostAddress("224.0.0.19")
        
        #self.start()
        
    def dataReceive(self):
        #totalmsg = ""
        self.datareceivenum+=1
        while self.udpSocket.hasPendingDatagrams():
            datagram = QByteArray()
            datagram.resize(self.udpSocket.pendingDatagramSize())
            msglist = self.udpSocket.readDatagram(datagram.size())
            msg = msglist[0]
            timetemp = msg[0:17]
            datanumth = msg[17:19]
            datatotalnum = msg[19:21]
            datacontent = msg[21:]
            
            self.addToLocal(timetemp,datanumth,datatotalnum,datacontent)
            #self.timetemp = msg[0:9]
            #totalmsg = totalmsg+msg
            #self.emit(SIGNAL("imgsignal"),totalmsg)
            self.datanum+=1
            #self.list.append(msg)
            
    def dataReceived(self):
        if self.startReceive == False:
            return
        try:
            msg = self.getDataContent()
            timetemp = msg[0:17]
            datanumth = msg[17:19]
            datatotalnum = msg[19:21]
            datacontent = msg[21:]
            self.addToLocal(timetemp,datanumth,datatotalnum,datacontent)
            self.datanum+=1
        except:
        
    def getDataContent(self):
        while self.udpSocket.hasPendingDatagrams():
            msglist = self.udpSocket.readDatagram(65*1024)  
            
            msg = msglist[0]  
            return msg
        
        return None
    
            
    def addToLocal(self,timetemp,datanumth,datatotalnum,datacontent):
        if self.framedata.has_key(timetemp):
            self.framedata[timetemp][datanumth] = datacontent
            if len(self.framedata[timetemp]) == int(datatotalnum):
                self.localframenum+=1
                self.dataframelist[timetemp] = self.framedata[timetemp]
                self.framedata.pop(timetemp)
        else:
            self.framedata[timetemp] = {}
            self.framedata[timetemp][datanumth] = datacontent
            
            
    def parseLocalData(self):
        framedatas = self.dataframelist
        for key in framedatas.keys():
            if len(framedatas[key]) == self.datagramcount:
                self.localframenum+=1
                dataframe = framedatas[key]
                imgdata = ""
                for i in range(0,self.datagramcount):
                    keys = "%02d"%i
                    imgdata = imgdata + dataframe[keys]
                    #imgdata = dataframe["00"] + dataframe["01"] + dataframe["02"] + dataframe["03"]
                self.framelist[key] = imgdata
                self.framedata.pop(key)
                return
            
    def sortAddLocalList(self):
        if len(self.dataframelist) >= 5:
            keylist = []
            for key in self.dataframelist:
                keylist.append(int(key))
            keylist.sort()
            imgdata = ""
            for i in range(0,len(self.dataframelist[("%017d"%(keylist[0]))])):
                keys = "%02d"%i
                imgdata = imgdata + self.dataframelist[("%017d"%(keylist[0]))][keys]
        
            self.currentframe = imgdata
        
            self.dataframelist.pop(("%017d"%(keylist[0])))
        else:
            self.currentframe = None
            
    def dataReceiveTwo(self):
        while self.udpSocketTwo.hasPendingDatagrams():
            datagram = QByteArray()
            datagram.resize(self.udpSocketTwo.pendingDatagramSize())
            msglist = self.udpSocketTwo.readDatagram(datagram.size())
            msg = str(msglist[0])
            
        self.parseMsg(msg)
        
    def slotStartAllBroadcast(self,msgs):
#         flag = False
#         iplist = msgs.split("#")
#         localip = globalfunc.get_ip_address()
#         for item in iplist:
#             if item == localip:
#                 flag = True
#                 break
#         if flag:
        #self.udpSocket.joinMulticastGroup(self.mcast_addr)#加入组
        self.startReceive = True
        
        self.emit(SIGNAL("startbroadcast"))
        self.datanum = 0
        self.datareceivenum = 0
        self.localframenum = 0
        self.avilableframenum = 0
        self.necnum = 0
        self.broadFlag = True
        self.start()
        
    def slotStartSomeBroadcast(self,fmsgs,smsgs):
        if fmsgs == "somehost" and QString(smsgs).contains(self.clientuuid):
            #self.udpSocket.joinMulticastGroup(self.mcast_addr_own)
            self.startReceive = True
            
            self.emit(SIGNAL("startbroadcast"))
            self.datanum = 0
            self.datareceivenum = 0
            self.localframenum = 0
            self.avilableframenum = 0
            self.necnum = 0
            self.broadFlag = True
            self.start()
    
    def slotStopBroadcast(self):
        pass
    def slotSetMousePos(self,msg):
        if len(msg.split("#")) == 3:
            mousex = int(msg.split("#")[1])
            mousey = int(msg.split("#")[2])
            self.emit(SIGNAL("mousepos"),mousex,mousey)
        
    def parseMsg(self,msg):
        if len(msg.split("#")) >= 2:
            if msg.split("#")[0] == "teacherip":
                self.teacherIp = msg.split("#")[1]
                self.emit(SIGNAL("receiveteacherip"),self.teacherIp)
            elif msg.split("#")[0] == "mousepos":
                self.slotSetMousePos(msg)
            elif msg.split("#")[0] == "startbroadcast":
                self.slotStartAllBroadcast(msg)
                    
            elif msg.split("#")[0] == "stopbroadcast":
                #self.udpSocket.leaveMulticastGroup(self.mcast_addr_own)
                self.startReceive = True
                    
                self.emit(SIGNAL("stopbroadcast"))
                self.broadFlag = False
#                 lent = len(self.framedata)
#                 file = open("frame.txt","w")
#                 file.write(QString.number(self.datanum))
#                 file.write("++")
#                 file.write(QString.number(self.datareceivenum))
#                 file.write("++")
#                 file.write(QString.number(self.localframenum))
#                 file.write("++")
#                 file.write(QString.number(self.necnum))
#                 file.write("++")
#                 file.write(QString.number(self.avilableframenum))
#                 file.write("++")
#                 file.write(QString.number(lent))
#                 file.close()
                
                self.framedata.clear()
                self.dataframelist.clear()
                self.currentframe = None
            

    def writeDataToSocket(self):
        hour = "%02d"%(QTime.currentTime().hour())
        minute = "%02d"%(QTime.currentTime().minute())
        second = "%02d"%(QTime.currentTime().second())
        if self.teacherIp != "":
            ip = self.teacherIp
            name = "client-" + self.clientuuid
            data = name + "#" + hour + minute + second
            self.udpSocket.writeDatagram(data, QHostAddress(ip), self.porttwo)
            
            
    def run(self):
        #return
        while self.broadFlag:
            self.sortAddLocalList()
            if self.currentframe == None:
                time.sleep(0.01)
                continue
            
            msg = self.currentframe
            #if self.msginfo != msg:
            self.necnum+=1
            self.avilableframenum+=1
            self.emit(SIGNAL("imgsignal"),msg)
            self.msginfo = msg
                    
            time.sleep(0.01)
    
    def pickImage(self,list):
        if len(self.list) >=10:
            self.list.remove(self.list[0])
        imglist = []    
        if len(list) <= 2:
            return []
        #timetemp = list[0][0:9]
        for item in list:
            if item[0:9] == self.timetemp:
                imglist.append(item)
        if len(imglist) == 4:
            self.list.remove(imglist[0])
            self.list.remove(imglist[1])
            self.list.remove(imglist[2])
            self.list.remove(imglist[3])
            return imglist
        else:
            return []
示例#11
0
class MainWindow(QtGui.QMainWindow):
    """This app receives per actor osc messages and provides an mjpeg stream
    with colored text representation arranged in columns"""
    def __init__(self, args, parent=None):
        self.args = args
        QtGui.QMainWindow.__init__(self, parent)

        self.osc_sock = QUdpSocket(self)
        logger.info("osc bind localhost %d", self.args.client_port)
        self.osc_sock.bind(QHostAddress(self.args.client_host),
                           self.args.client_port)
        self.osc_sock.readyRead.connect(self.got_message)
        self.osc_sock.error.connect(self.handle_osc_error)
        self.subscribe()

        self.graphics_view = QtGui.QGraphicsView(self)
        self.resize(640, 480)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Monospace"))
        font.setPointSize(12)
        font.setItalic(True)
        self.setFont(font)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 220))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 220))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 220))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase,
                         brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText,
                         brush)
        self.graphics_view.setPalette(palette)
        self.graphics_view.setAutoFillBackground(False)
        self.graphics_view.setObjectName(_fromUtf8("graphics_view"))
        self.setCentralWidget(self.graphics_view)
        self.graphics_view.setHorizontalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOff)
        self.graphics_view.setVerticalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOff)
        self.graphics_view.setRenderHint(QtGui.QPainter.Antialiasing, True)
        self.graphics_view.setFrameStyle(QtGui.QFrame.NoFrame)
        self.graphics_scene = QtGui.QGraphicsScene(self)
        self.graphics_scene.setSceneRect(0, 0, 640, 480)
        self.graphics_view.setScene(self.graphics_scene)
        self.default_font = QtGui.QFont("Monospace", 12)
        self.default_font.setStyleHint(QtGui.QFont.Monospace)
        self.default_font.setBold(True)
        self.graphics_scene.setFont(self.default_font)
        self.font_metrics = QtGui.QFontMetrics(self.default_font)
        self.line_height = self.font_metrics.height()
        self.setWindowTitle(_translate("MainWindow", "DumpGrabberMain", None))
        columns = 3
        self.column_width = 640 / columns
        self.text_storage = ExclusiveTextStorage(columns, self.default_font,
                                                 self.column_width,
                                                 self.line_height,
                                                 self.graphics_scene)
        self.text_storage.init_columns()
        self.regex = re.compile("^/(uwe|merle|bjoern)/(.*?)$")
        self.osc_sock.readyRead.connect(self.got_message)
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.render_image)
        self.timer.start(100)

    def sigint_handler(self, ex_cls, ex, tb):
        """Handler for the SIGINT signal."""
        logger.info("sigint_handler")
        if ex_cls == KeyboardInterrupt:
            logger.info("found KeyboardInterrupt")
            self.unsubscribe()
            QtGui.QApplication.exit()
        else:
            logger.critical(''.join(traceback.format_tb(tb)))
            logger.critical('{0}: {1}'.format(ex_cls, ex))

    def sigterm_handler(self, *args):
        logger.info("sigterm_handler")
        self.unsubscribe()
        QtGui.QApplication.exit()

    def subscribe(self):
        logger.info("subscribe")
        msg = OSCMessage("/subscribe")
        logger.info(self.args.client_host)
        msg.appendTypedArg(self.args.client_host, "s")
        msg.appendTypedArg(self.args.client_port, "i")
        msg.appendTypedArg(self.args.authenticate, "s")
        if self.args.subscriber_label is not None:
            msg.appendTypedArg(self.args.subscriber_label, "s")
        self.osc_sock.writeDatagram(QByteArray(msg.encode_osc()),
                                    QHostAddress(self.args.chaosc_host),
                                    self.args.chaosc_port)

    def unsubscribe(self):
        logger.info("unsubscribe")
        msg = OSCMessage("/unsubscribe")
        msg.appendTypedArg(self.args.client_host, "s")
        msg.appendTypedArg(self.args.client_port, "i")
        msg.appendTypedArg(self.args.authenticate, "s")
        self.osc_sock.writeDatagram(QByteArray(msg.encode_osc()),
                                    QHostAddress(self.args.chaosc_host),
                                    self.args.chaosc_port)

    def handle_osc_error(self, error):
        logger.info("osc socket error %d", error)

    def closeEvent(self, event):
        logger.info("closeEvent %r", event)
        self.unsubscribe()
        event.accept()

    def pubdir(self):
        return os.path.dirname(os.path.abspath(__file__))

    def add_text(self, column, text):
        self.text_storage.add_text(column, text)

    def render_image(self):
        # print "render_iamge"
        self.text_storage.finish()
        # image = QPixmap(768, 576)
        # image.fill(QtCore.Qt.black)
        # painter = QPainter(image)
        #painter.setRenderHints(QPainter.RenderHint(
        #    QPainter.Antialiasing | QPainter.TextAntialiasing), True)
        #painter.setFont(self.default_font)
        #self.graphics_view.render(
        #    painter, target=QtCore.QRectF(0, 0, 768, 576),
        #    source=QtCore.QRect(0, 0, 768, 576))
        #painter.end()
        #buf = QBuffer()
        #buf.open(QIODevice.WriteOnly)
        #image.save(buf, "JPG", 100)
        #image_data = buf.data()
        #return image_data

    def got_message(self):
        def convert(value):
            if isinstance(value, float):
                return "%.1f" % value
            else:
                return str(value)

        while self.osc_sock.hasPendingDatagrams():
            data, address, port = self.osc_sock.readDatagram(
                self.osc_sock.pendingDatagramSize())
            try:
                osc_address, typetags, args = decode_osc(data, 0, len(data))
            except ValueError:
                return
            try:
                actor, text = self.regex.match(osc_address).groups()
            except AttributeError:
                pass
            else:
                if actor == "merle":
                    self.add_text(
                        0, "%s = %s" %
                        (text, ", ".join([convert(i) for i in args])))
                elif actor == "uwe":
                    self.add_text(
                        1, "%s = %s" %
                        (text, ", ".join([convert(i) for i in args])))
                elif actor == "bjoern":
                    self.add_text(
                        2, "%s = %s" %
                        (text, ", ".join([convert(i) for i in args])))
        return True
示例#12
0
def _send_mcast(data, address = QHostAddress.Broadcast):
	udpSocket = QUdpSocket()
	addr = QHostAddress(address)
	print "Sending :", unicode(data), ' to:', addr.toString(), ':34001'
	return udpSocket.writeDatagram(QString(data).toUtf8().data(), addr, 34001)
示例#13
0
class EkgPlotWidget(QMainWindow):
    def __init__(self, args, parent=None):
        self.args = args
        QMainWindow.__init__(self, parent)
        self.mcount = 0

        self.osc_sock = QUdpSocket(self)
        logger.info("osc bind localhost %d", self.args.client_port)
        self.osc_sock.bind(QHostAddress(self.args.client_host), self.args.client_port)
        self.osc_sock.readyRead.connect(self.got_message)
        self.osc_sock.error.connect(self.handle_osc_error)
        self.subscribe()

        self.plot_widget = PlotWidget()
        self.setCentralWidget(self.plot_widget)
        self.resize(args.client_width, args.client_height)
        colors = ["r", "g", "b"]
        self.active_actors = list()
        self.actors = dict()
        self.max_value = 255
        actor_names = ["merle", "uwe", "bjoern"]
        self.max_actors = len(actor_names)
        self.actor_height = self.max_value / self.max_actors
        self.fps = 12.5
        self.num_data = 100
        self.plot_widget.showGrid(False, False)
        self.plot_widget.setYRange(0, 255)
        self.plot_widget.setXRange(0, self.num_data)
        self.plot_widget.resize(args.client_width, args.client_height)

        bottom_axis = self.plot_widget.getAxis("bottom")
        left_axis = self.plot_widget.getAxis("left")
        bottom_axis.setTicks([])
        left_axis.setTicks([])
        bottom_axis.hide()
        left_axis.hide()

        for ix, (actor_name, color) in enumerate(zip(actor_names, colors)):
            self.add_actor(actor_name, self.num_data, color, ix, self.max_actors, self.actor_height)

        self.set_positions()
        self.ekg_regex = re.compile("^/(.*?)/ekg$")
        self.heartbeat_regex = re.compile("^/(.*?)/heartbeat$")

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.render_image)
        self.timer.start(50)


    def subscribe(self):
        logger.info("subscribe")
        msg = OSCMessage("/subscribe")
        msg.appendTypedArg(self.args.client_host, "s")
        msg.appendTypedArg(self.args.client_port, "i")
        msg.appendTypedArg(self.args.authenticate, "s")
        if self.args.subscriber_label is not None:
            msg.appendTypedArg(self.args.subscriber_label, "s")
        self.osc_sock.writeDatagram(QByteArray(msg.encode_osc()), QHostAddress(self.args.chaosc_host),
                                    self.args.chaosc_port)

    def unsubscribe(self):
        logger.info("unsubscribe")
        msg = OSCMessage("/unsubscribe")
        msg.appendTypedArg(self.args.client_host, "s")
        msg.appendTypedArg(self.args.client_port, "i")
        msg.appendTypedArg(self.args.authenticate, "s")
        self.osc_sock.writeDatagram(QByteArray(msg.encode_osc()), QHostAddress(self.args.chaosc_host),
                                    self.args.chaosc_port)

    def handle_osc_error(self, error):
        logger.info("osc socket error %d", error)

    def closeEvent(self, event):
        logger.info("closeEvent %r", event)
        self.unsubscribe()
        event.accept()

    def pubdir(self):
        return os.path.dirname(os.path.abspath(__file__))

    def add_actor(self, actor_name, num_data, color, ix, max_actors, actor_height):
        actor_obj = Actor(actor_name, num_data, color, ix, max_actors, actor_height)
        self.actors[actor_name] = actor_obj
        self.plot_widget.addItem(actor_obj.plotItem)
        self.plot_widget.addItem(actor_obj.plotPoint)
        self.active_actors.append(actor_obj)

    def set_positions(self):
        for ix, actor_obj in enumerate(self.active_actors):
            actor_obj.plotItem.setPos(0, ix * 2)
            actor_obj.plotPoint.setPos(0, ix * 2)

    def active_actor_count(self):
        return self.max_actors

    def update(self, osc_address, args):
        res = self.ekg_regex.match(osc_address)
        if res:
            self.mcount += 1
            actor_name = res.group(1)
            actor_obj = self.actors[actor_name]
            actor_obj.add_value(args[0])
            logger.info("actor: %r, %r", actor_name, args)

    def render_image(self):
        for actor_obj in self.active_actors:
            actor_obj.add_value(actor_obj.osci.next())
            actor_obj.render()

    @QtCore.pyqtSlot()
    def render_image(self):
        for actor_obj in self.active_actors:
            actor_obj.render()
        print self.mcount

    def got_message(self):
        while self.osc_sock.hasPendingDatagrams():
            data, address, port = self.osc_sock.readDatagram(self.osc_sock.pendingDatagramSize())
            try:
                osc_address, typetags, args = decode_osc(data, 0, len(data))
                self.update(osc_address, args)
            except ValueError, error:
                logger.exception(error)
示例#14
0
文件: p2p.py 项目: unimer/p2pchat
 def send_datagram(self, message):
     send = QUdpSocket()
     send.writeDatagram(message, QHostAddress(self.clientIp.text()), self.clientPort.value())