Ejemplo n.º 1
0
 def usuarioAlive(self, carnet):
     #verifica si el usuario esta en la lista de alives
     #se lee todo el archivo para guardarlo en una lista
     #se busca si el usuario ya esta registrado
     #si el usuario no esta entonces lo agrego al archivo
     objetoArchivo = lecturaArchivos.LecturaArchivo("alives.txt")
     listaAlives = objetoArchivo.getArreglo()
     usuarioVive = carnet in listaAlives
     if (usuarioVive == False):
         objetoArchivo.escribirArreglo(str(carnet))
Ejemplo n.º 2
0
def negociacionRedireccion(destinatario, fileSize, nombreFile):

    if (str(destinatario).isdigit() == True):  #es un carnet
        trama_redireccion = comandosCliente.comandosCliente().getTrama(
            COMMAND_FRR, destinatario, fileSize)
        client.publish("comandos/14/" + str(destinatario),
                       trama_redireccion,
                       qos=2,
                       retain=False)
        print("Enviando comando FRR al cliente destino " + str(destinatario) +
              " nombre archivo: " + str(nombreFile) + " de tamanio " +
              str(fileSize))
        #se empieza la transferencia
        pass
    else:  #es una sala, tengo que enciclar hasta mandar a todos, revisando quienes estan en esa sala
        #con el archivo de listado de personas asignadas a salas
        usuariosRegistrados = lecturaArchivos.LecturaArchivo(
            "usuarios.txt").getArreglo()
        for usuarioDestino in usuariosRegistrados:
            #recorro cada item del arreglo para ver si le toca recibir el archivo o no
            #verifico en todas las salas que tenga asignadas
            objetoUsuario = usuarioDestino.split(",")
            carnetDestino = objetoUsuario[0]
            longitud = len(objetoUsuario)
            #si la longitud es mayor a dos, la persona esta asignada a alguna sala, si no no.
            if (longitud >= 2):
                for index in range(2, longitud):
                    #voy verificando si la sala que tiene asignada es la destino
                    salaAsignada = objetoUsuario[index]
                    print("sala asignada de " + str(carnetDestino) + " es : " +
                          str(salaAsignada))
                    if (salaAsignada == destinatario):
                        #si tiene asignada la sala, entonces le envio la trama
                        trama_redireccion = comandosCliente.comandosCliente(
                        ).getTrama(COMMAND_FRR, str(carnetDestino), fileSize)
                        client.publish("comandos/14/" + str(carnetDestino),
                                       trama_redireccion,
                                       qos=2,
                                       retain=False)
                        print("Enviando comando FRR al cliente destino " +
                              str(carnetDestino) + " nombre archivo: " +
                              str(nombreFile) + " de tamanio " + str(fileSize))
        print("termino de enviar a todos los usuarios en la sala")
Ejemplo n.º 3
0

#conexion a mqtt
#configurar al cliente como publisher y subscriber
client = mqtt.Client(clean_session=True)  #Nueva instancia de cliente
client.on_connect = on_connect  #Se configura la funcion "Handler" cuando suceda la conexion
client.on_message = on_message  #Se configura la funcion "Handler" que se activa al llegar un mensaje a un topic subscrito
client.on_publish = on_publish  #Se configura la funcion "Handler" que se activa al publicar algo
client.username_pw_set(MQTT_USER,
                       MQTT_PASS)  #Credenciales requeridas por el broker
client.connect(host=MQTT_HOST, port=MQTT_PORT)  #Conectar al servidor remoto

#Nos conectaremos a distintos topics:
qos = 2
#suscribirse a todos los topics del archivo
topics = lecturaArchivos.LecturaArchivo("topics.txt").getArreglo()
for topic in topics:
    client.subscribe((str(topic), qos))

#Iniciamos el thread (implementado en paho-mqtt) para estar atentos a mensajes en los topics subscritos
client.loop_start()

#El thread de MQTT queda en el fondo, mientras en el main loop hacemos otra cosa
try:
    while True:
        pass

except KeyboardInterrupt:
    logging.warning("Desconectando del broker...")

finally:
Ejemplo n.º 4
0
import clienteClass
import lecturaArchivos
import comandosCliente
from broker import *
from globalconst import *
import os

##JPGM empieza codigo de consumo de la clase
#variables globales:
qos = 2
#inicia loop principal
esperandoRespuesta = False
usuarioCarnet = "" #NUMERO DE CARNET DEL CLIENTE

#extraer el carnet del cliente conectado -> servira para saber a que topic de comandos pertenece
usuariosFile = lecturaArchivos.LecturaArchivo("usuario.txt").getArreglo()

for usuario in usuariosFile:
    usuarioCarnet = str(usuario)

#se instancia la clase
clienteMain = clienteClass.clienteClass(usuarioCarnet)
clienteMain.conectarMQTT()
clienteMain.iniciarLoggin()
#suscribirse a todos los topics del archivo
topics = lecturaArchivos.LecturaArchivo("topics.txt").getArreglo()

for topic in topics:
    clienteMain.suscribirse(topic)

clienteMain.iniciarLoop()
Ejemplo n.º 5
0
    def negociacionRemitente(self, destinatario, fileSize, nombreFile,
                             remitente):

        if (str(destinatario).isdigit() == True):  #es un carnet

            # se lee el archivo de alives
            estaVivo = alive.alives().getUsuarioAlive(destinatario)
            if (estaVivo == True):  #si esta vivo envio
                trama_redireccion = comandosCliente.comandosCliente().getTrama(
                    COMMAND_OK, remitente)
                self.publicar("comandos/14/" + str(remitente),
                              trama_redireccion)
                print("Enviando comando OK al cliente remitente " +
                      str(remitente) + " para enviar al destinatario " +
                      str(destinatario))
                self.NuevoServerTCP.recibirservidor()
                t2 = threading.Thread(name='Contador de 1 segundo',
                                      target=self.negociacionRedireccion,
                                      args=((str(destinatario), str(fileSize),
                                             str(nombreFile))),
                                      daemon=True)
                t2.start()

            else:
                print("")
                print("El usuario: " + str(destinatario) + " no esta vivo.")
                #mando comando NO

        else:  #es una sala, tengo que enciclar hasta mandar a todos, revisando quienes estan en esa sala
            #con el archivo de listado de personas asignadas a salas
            contador = 0
            usuariosRegistrados = lecturaArchivos.LecturaArchivo(
                "usuarios.txt").getArreglo()
            for usuarioDestino in usuariosRegistrados:
                #recorro cada item del arreglo para ver si le toca recibir el archivo o no
                #verifico en todas las salas que tenga asignadas
                objetoUsuario = usuarioDestino.split(",")
                carnetDestino = objetoUsuario[0]
                longitud = len(objetoUsuario)
                #si la longitud es mayor a dos, la persona esta asignada a alguna sala, si no no.
                if (longitud >= 2):
                    for index in range(2, longitud):
                        #voy verificando si la sala que tiene asignada es la destino
                        salaAsignada = objetoUsuario[index]
                        print("sala asignada de " + str(carnetDestino) +
                              " es : " + str(salaAsignada))
                        if (salaAsignada == destinatario):
                            #si tiene asignada la sala, entonces le envio la trama (SI ESTA VIVO)
                            # se lee el archivo de alives
                            estaVivo = alive.alives().getUsuarioAlive(
                                carnetDestino)
                            if (estaVivo == True):  #si esta vivo envio
                                contador = contador + 1

            if (contador > 0):  #significa que si hay destinatarios disponibles
                trama_redireccion = comandosCliente.comandosCliente().getTrama(
                    COMMAND_OK, remitente)
                self.publicar("comandos/14/" + str(remitente),
                              trama_redireccion)
                print("Enviando comando OK al cliente remitente " +
                      str(remitente) + " para enviar al destinatario " +
                      str(destinatario))
                #procedo a hacer la negociacion ahora de redireccion a destinatarios
                self.NuevoServerTCP.recibirservidor()
                t2 = threading.Thread(name='Contador de 1 segundo',
                                      target=self.negociacionRedireccion,
                                      args=((str(destinatario), str(fileSize),
                                             str(nombreFile))),
                                      daemon=True)
                t2.start()
Ejemplo n.º 6
0
    def negociacionRedireccion(self, destinatario, fileSize, nombreFile):

        if (str(destinatario).isdigit() == True):  #es un carnet

            # se lee el archivo de alives
            estaVivo = alive.alives().getUsuarioAlive(destinatario)
            if (estaVivo == True):  #si esta vivo envio
                trama_redireccion = comandosCliente.comandosCliente().getTrama(
                    COMMAND_FRR, destinatario, fileSize)
                #client.publish("comandos/14/" + str(destinatario), trama_redireccion, qos = 2, retain = False)

                self.publicar("comandos/14/" + str(destinatario),
                              trama_redireccion)
                print("Enviando comando FRR al cliente destino " +
                      str(destinatario) + " nombre archivo: " +
                      str(nombreFile) + " de tamanio " + str(fileSize))
                #se empieza la transferencia
                # NuevoServerTCP = servidorTCP.servidorTCP(IP_TCP , 9800, 65495,TCP_PORT) #Definimos los valores iniciales
                self.NuevoServerTCP.mandarservidor()
            else:
                print("")
                print("El usuario: " + str(destinatario) + " no esta vivo.")

        else:  #es una sala, tengo que enciclar hasta mandar a todos, revisando quienes estan en esa sala
            #con el archivo de listado de personas asignadas a salas
            usuariosRegistrados = lecturaArchivos.LecturaArchivo(
                "usuarios.txt").getArreglo()
            for usuarioDestino in usuariosRegistrados:
                #recorro cada item del arreglo para ver si le toca recibir el archivo o no
                #verifico en todas las salas que tenga asignadas
                objetoUsuario = usuarioDestino.split(",")
                carnetDestino = objetoUsuario[0]
                longitud = len(objetoUsuario)
                #si la longitud es mayor a dos, la persona esta asignada a alguna sala, si no no.
                if (longitud >= 2):
                    for index in range(2, longitud):
                        #voy verificando si la sala que tiene asignada es la destino
                        salaAsignada = objetoUsuario[index]
                        print("sala asignada de " + str(carnetDestino) +
                              " es : " + str(salaAsignada))
                        if (salaAsignada == destinatario):
                            #si tiene asignada la sala, entonces le envio la trama (SI ESTA VIVO)
                            # se lee el archivo de alives
                            estaVivo = alive.alives().getUsuarioAlive(
                                carnetDestino)
                            if (estaVivo == True):  #si esta vivo envio
                                trama_redireccion = comandosCliente.comandosCliente(
                                ).getTrama(COMMAND_FRR, str(carnetDestino),
                                           fileSize)
                                #client.publish("comandos/14/" + str(carnetDestino), trama_redireccion, qos = 2, retain = False)
                                self.publicar(
                                    "comandos/14/" + str(carnetDestino),
                                    trama_redireccion)
                                print(
                                    "Enviando comando FRR al cliente destino "
                                    + str(carnetDestino) +
                                    " nombre archivo: " + str(nombreFile) +
                                    " de tamanio " + str(fileSize))
                                self.NuevoServerTCP.mandarservidor()

            print("termino de enviar a todos los usuarios en la sala")
Ejemplo n.º 7
0
 def limpiarAlives(self):
     objetoArchivo = lecturaArchivos.LecturaArchivo("alives.txt")
     objetoArchivo.limpiarArchivo()
Ejemplo n.º 8
0
# for usuario in usuariosFile:
#     usuarioCarnet = str(usuario)

#se instancia la clase
clienteMain = clienteClass.clienteClass(usuarioCarnet, False)
clienteMain.conectarMQTT()
clienteMain.iniciarLoggin()
NuevoClienteTCP = clienteTCP.clienteTCP(IP_TCP, 9800, 65495, TCP_PORT)
#suscribirse a todos los topics del archivo - leo salas y le agrego el usuario, lo suscribo a su topic de comandos
topicComandos_file = "comandos/14/" + usuarioCarnet
topicUsuario_file = "usuarios/14/" + usuarioCarnet
clienteMain.suscribirse(topicUsuario_file)
clienteMain.suscribirse(topicComandos_file)

salasFile = lecturaArchivos.LecturaArchivo("salas.txt").getArreglo()

for salaItem in salasFile:
    topicSalaFile = "salas/14/" + salaItem
    clienteMain.suscribirse(topicSalaFile)

clienteMain.iniciarLoop()

#JGPM El thread de MQTT queda en el fondo, mientras en el main loop hacemos otra cosa
try:
    while True:

        print("Hola cliente " + str(usuarioCarnet) +
              " bienvenido al examen final del grupo 14.")
        print("Menu")
        print("1. Enviar texto")