def conexiones(self, socket_cliente): """Recibe los mensajes de un socket TCP y los interpreta. Primero revisa si la cabecera es la correcta, 0x11, y después lee el resto del mensaje. Diferencia entre distintos eventos: - udpRx : Indica la dirección del grupo multicast al que hay que conectarse. - pauseTx : Indica que la comunicación se ha parado. - resumeTx : Indica que la comunicación se reanuda. - endTx : Indica que la comunicación ha finalizado completamente. """ global rx_pipeline, play, buff_Rx, udp_addr, recv_udp while 1: cabecera = socket_cliente.recv(1) if cabecera == '\x11': len_length = int(socket_cliente.recv(1)) print "[*] Longitud del campo longitud: %d" % (len_length) length = int(socket_cliente.recv(len_length)) print "[*] Longitud del mensaje recibido: %s" % length data = socket_cliente.recv(length) rx_msg = json.loads(data) event = rx_msg["event"] if event == "udpRx": udp_addr = rx_msg["data"] print "UDP_RX on " + udp_addr recv_udp = 0 udp_listener = threading.Thread( target=lambda: self.udp_rx()) udp_listener.setDaemon(True) udp_listener.start() elif event == "pauseTx": recv_udp = 1 rx_pipeline.set_state(gst.State.PAUSED) elif event == "resumeTx": recv_udp = 0 rx_pipeline.set_state(gst.State.PLAYING) elif event == "endTx": recv_udp = 2 rx_pipeline.set_state(gst.State.NULL) play = 0 buff_Rx = None buff_Rx = gio.MemoryInputStream() elif event == "delete": sys.exit() socket_cliente.close()
def reboot(self, controller): """Reinicia el cliente y vuelve a la página inicial. """ global rx_pipeline, play, buff_Rx, tcp_conn, discovery_sock if rx_pipeline != None: rx_pipeline.set_state(gst.State.NULL) play = 0 buff_Rx = None buff_Rx = gio.MemoryInputStream() if tcp_conn != None: tcp_conn.close() tcp_conn = None discovery_sock.close() if self.udp_conn != None: self.udp_conn.close() controller.show_frame(StartPage)
def empty(self): return Gio.MemoryInputStream()
from Tkinter import * import tkMessageBox import ttk except ImportError: print "#ERROR: Tkinter not installed" print "Execute 'sudo apt-get install python-tk'" sys.exit() DISCOVERY_ADDR = '239.11.11.11' # Dirección del grupo multicast por donde hacemos el descubrimiento DISCOVERY_PORT = 3000 # Puerto del grupo multicast por donde hacemos el descubrimiento discovery_task = None # Tarea que escucha mensajes de descubrimiento discovery_sock = None # Socket de descubrimiento mutant_ip = None # Dirección ip del mutante mutant_type = None # Tipo de mutante del cliente mutant_name = None # Nombre del mutante buff_Rx = gio.MemoryInputStream() # Datos de entrada tx_pipeline = None # Pipeline de transmisión rx_pipeline = None # Pipeline de recepción play = 0 # Variable que se usa para esperar 20 paquetes antes de empezar a reproducir tcp_conn = None # Socket TCP udp_addr = None # Dirección para comunicación UDP recv_udp = 1 # Indica si tenemos que recibir (0) o no (1) paquetes UDP status = None # Estado del cliente def discovery(): """Servidor que escucha mensajes de descubrimiento para enviar la información del mutante. Esta función se encarga de crear un socket UDP y unirlo al grupo multicast 239.11.11.11:30000 que es el que usaremos para enviar mensajes de descubrimiento. Al recibir un mensaje de descubrimiento envía su nombre, tipo y su IP.