Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
 def empty(self):
     return Gio.MemoryInputStream()
Exemplo n.º 4
0
    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.