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"
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)
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())
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)
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)
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"
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()
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)
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 []
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
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)
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)
def send_datagram(self, message): send = QUdpSocket() send.writeDatagram(message, QHostAddress(self.clientIp.text()), self.clientPort.value())