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))
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")
#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:
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()
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()
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")
def limpiarAlives(self): objetoArchivo = lecturaArchivos.LecturaArchivo("alives.txt") objetoArchivo.limpiarArchivo()
# 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")