def receive(self, event): if event.getName() == "Mensaje": for t in range(len( self.neighbors)): #Para poner en verdadero su estado if event.getSource() == self.neighbors[t]: self.recibi[t] = True if self.visited == False: self.visited = True self.padre = event.getSource() if (event.getSource() in self.sinVisitar ): #Si la fuente esta en sinVisitar se quita de allo self.sinVisitar.remove(event.getSource()) for i in self.sinVisitar: #Manda mensaje a todos sus vecinos menos a su padre newevent = Event("Mensaje", self.clock + 1.0, i, self.id) print(" Soy el nodo ", self.id, " y mando MENSAJE a mi vecino: ", i, " en el tiempo ", newevent.getTime()) self.transmit(newevent) alerta = True for r in range( len(self.neighbors) ): #Reviso si todos los vecinos ya tienen verdadero en su estado de recibi if self.recibi[r] == False: alerta = False if alerta == True: #Si ya es verdadera toda su lista de vecinos y el padre es diferente del que soy mando mensaje if self.padre != self.id: newevent = Event("Mensaje", self.clock + 1.0, self.padre, self.id) print(" Soy el nodo ", self.id, " y mando MENSAJE a mi padre ", self.padre, " en el tiempo ", newevent.getTime()) self.transmit(newevent)
def go(self): if (len(self.sinVisitar) != 0): k = self.sinVisitar.pop(0) newevent = Event("DESC", self.clock + 1.0, k, self.id) print(" Soy el nodo ", self.id, " y mando DESC a mi vecino ", k, " en el tiempo de ", newevent.getTime()) self.transmit(newevent) elif (self.padre != self.id): newevent = Event("REG", self.clock + 1.0, self.padre, self.id) print(" Soy el nodo ", self.id, " y mando REG a mi padre ", self.padre, " en el tiempo de ", newevent.getTime()) self.transmit(newevent)
def receive(self, event): """ Aqui se definen las acciones concretas que deben ejecutarse cuando se recibe un evento """ if self.visited == False: print("soy ", self.id, " recibo mensaje a las ", self.clock, " desde ", event.getSource()) self.visited = True for t in self.neighbors: newevent = Event("C", self.clock + 1.0, t, self.id) print(" proximo evento a las ", newevent.getTime()) self.transmit(newevent)
def test_return_event_list(self): error = 0.01 e = Event(time(), 'foo') p = EventProcessorDelay(e,2) p.start() p.join() self.assertEqual(len(p.returnEvents),1) re = p.returnEvents[0] self.assertEqual(isinstance(re,Event),True) self.assertEqual(re.getLabel(),'foo') self.assertEqual( e.getTime()+2.0 < re.getTime() + error , True) self.assertEqual( e.getTime()+2.0 > re.getTime() - error , True)
def receive(self, event): if(event.getName() == "DESC"): #Al momento de ser despertado manda un mensaje descubre for t in self.neighbors: newevent = Event("AVISO", self.clock+1.0, t, self.id) print (" Soy el nodo ", self.id, " y mando aviso a todos mis vecinos ", t, " en el tiempo ", newevent.getTime()) self.transmit(newevent) if(event.getSource() in self.sinVisitar): #Quitamos al nodo que manda el mensaje self.sinVisitar.remove(event.getSource()) #print ("Mis vecinos son ", self.sinVisitar, "Fuente = ", event.getSource()) self.visited = True self.padre = event.getSource() self.go() elif(event.getName() == "REG"): self.go() else: #Solo entra cuando el mensaje es AVISO para eliminar la fuente if(event.getSource() in self.sinVisitar): self.sinVisitar.remove(event.getSource()) """
def test_event_setup(self): t = time() event = Event(t,'test_event') self.assertEqual(event.getTime(),t) self.assertEqual(event.getLabel(),'test_event')
def receive(self, event): if (event.getName() == "DESC" ): #Al momento de ser despertado manda un mensaje descubre for t in self.neighbors: newevent = Event("AVISO", self.clock + 1.0, t, self.id) print(" Soy el nodo ", self.id, " y mando aviso a todos mis vecinos ", t, " en el tiempo ", newevent.getTime()) self.transmit(newevent) if (event.getSource() in self.sinVisitar ): #Quitamos al nodo que manda el mensaje self.sinVisitar.remove(event.getSource()) #print ("Mis vecinos son ", self.sinVisitar, "Fuente = ", event.getSource()) self.visited = True self.padre = event.getSource() if (self.primerFoto == False): #Ya puede empezar a guardar for i in range(len(self.recibChi)): if (event.getSource() == self.recibChi[i][0] and self.recibChi[i][3] == True): if (self.recibChi[i][3] == True): X = self.recibChi[i] X = list(X) if (X[2] == None): aux = [] X[2] = aux X[2].append("DESC") X = tuple(X) self.recibChi[i] = X #print("Añadi a recibCHI ", self.recibChi[i]) #self.recibChi[i][2].append("DESC") self.go() elif (event.getName() == "REG"): if (self.primerFoto == False): #Ya puede empezar a guardar for i in range(len(self.recibChi)): if (event.getSource() == self.recibChi[i][0] and self.recibChi[i][3] == True): if (self.recibChi[i][3] == True): X = self.recibChi[i] X = list(X) if (X[2] == None): aux = [] X[2] = aux X[2].append("REG") X = tuple(X) self.recibChi[i] = X #print("Añadi a recibCHI ", self.recibChi[i]) self.go() elif ( event.getName() == "AVISO" ): #Solo entra cuando el mensaje es AVISO para eliminar la fuente if (event.getSource() in self.sinVisitar): self.sinVisitar.remove(event.getSource()) if (self.primerFoto == False): #Ya puede empezar a guardar for i in range(len(self.recibChi)): if (event.getSource() == self.recibChi[i][0] and self.recibChi[i][3] == True): if (self.recibChi[i][3] == True): X = self.recibChi[i] X = list(X) if (X[2] == None): aux = [] X[2] = aux X[2].append("AVISO") X = tuple(X) self.recibChi[i] = X #print("Añadi a recibCHI ", self.recibChi[i]) elif (event.getName() == "FOTO"): #print ("SOY EL NODO ", self.id, " MI PADRE ES ", self.padre, " ENTRE A FOTO EN EL TIEMPO ", event.getTime()) if (self.primerFoto == True): #es la primera vez que recibe foto self.primerFoto = False self.estadoLocal.append( self.padre ) #lo primero que hace es guardar su estado local self.estadoLocal.append(self.sinVisitar) self.estadoLocal.append(self.visited) for i in range(len( self.visitadoChi)): #bandera del canal neighbors if (event.getSource() == self.visitadoChi[i]): self.visitadoChi[i] = True #ya fue visitado el canal for t in self.neighbors: #manda mensaje foto a todos sus vecinos newevent = Event("FOTO", self.clock + 1.0, t, self.id) print(" SOY EL NODO ", self.id, " MANDO MENSAJE FOTO A ", t, " EN EL TIEMPO ", newevent.getTime()) self.transmit(newevent) if (event.getSource() == self.id ): #caso especial para la semilla self.recibChi = [0] * ( len(self.neighbors) + 1 ) #Para almacenar el valor chi de la semilla self.recibChi[ len(self.recibChi) - 1] = event.getSource(), self.id, self.msj, True for i in range(len(self.neighbors)): self.recibChi[i] = self.neighbors[ i], self.id, None, True else: #No eres la semilla for i in range(len(self.neighbors)): if (event.getSource() == self.neighbors[i]): self.recibChi[i] = event.getSource( ), self.id, self.msj, True else: self.recibChi[i] = self.neighbors[ i], self.id, None, True print(" Mi canal es ", self.recibChi, " soy el nodo ", self.id) print(" Mi arreglo visitadoChi tiene ", self.visitadoChi, " soy el nodo ", self.id) print(" SOY EL NODO", self.id, " MI ESTADO LOCAL ES ", self.estadoLocal) else: for i in range( len(self.neighbors) ): #bandera para saber que el nodo ya tiene puros false if (event.getSource() == self.neighbors[i]): self.visitadoChi[i] = False #ya fue visitado el canal #else: # self.visitadoChi[i] = False for i in range(len(self.neighbors)): if (self.recibChi[i][3] == True): X = self.recibChi[i] X = list(X) X[3] = False X = tuple(X) self.recibChi[i] = X print(" ||| SOY EL NODO ", self.id, " YA CERRE EL CANAL ", self.recibChi[i][0], self.recibChi[i][1], " MI REGISTRO ES ", self.recibChi[i][2], " |||") for i in range( len(self.visitadoChi) ): #Para saber si todos sus canales ya fueron visitados if (self.visitadoChi[i] == False ): #Todos sus canales ya son falsos self.termineSnap = True else: self.termineSnap = False break if (self.termineSnap == True): print(" TERMINE SNAP") #print(" ----MI CHI ES ", self.recibChi) #print(" ****SOY EL NODO", self.id, " MI ARREGLO VISITADOCHI TIENE ", self.visitadoChi) """
def receive(self, event): if event.getName() == "DESPIERTA": #mensaje = "CANDIDATO,1".split(',') m1 = "CANDIDATO" m2 = str(event.getSource()) mensaje = (m1+","+m2).split(",") print(f"el mensaje tiene en mensaje {mensaje[0]} y en nodo {mensaje[1]}") #print(f"{mensaje}" if mensaje[0] == "CANDIDATO": if int(mensaje[1]) > self.id: #mensaje = ("CANDIDATO,"+candidato) #Guardar mensaje con candidato mensaje[0] = "CANDIDATO" #candidato = str(mensaje[1]) #mensaje[1] = candidato #print(f"La casilla uno tiene {mensaje[0]} y la casilla dos tiene {mensaje[1]}") newevent = Event(mensaje, self.clock+1.0, self.sinVisitar[0] , self.id) print (" Soy el nodo ", self.id, " y mando al CANDIDATO --> ", mensaje[1] ,"a mi vecino: ", self.sinVisitar[0], " en el tiempo ", newevent.getTime()) self.transmit(newevent) else: if int(mensaje[1]) <= self.id and self.visited != True: print("El id es mayor que la fuente") candidato = str(self.id) mensaje[0] = "CANDIDATO" mensaje[1] = candidato newevent = Event(mensaje, self.clock+1.0, self.sinVisitar[0], self.id) print (" Soy el nodo ", self.id, " y mando al CANDIDATO --> ", mensaje[1] ,"a mi vecino: ", self.sinVisitar[0], " en el tiempo ", newevent.getTime()) self.transmit(newevent) self.visited = True elif int(mensaje[1]) == self.id: print("la fuente es igual que el id") mensaje[0] = "ELECTO" #electo = str(self.id) #mensaje[1] = electo newevent = Event(mensaje, self.clock+1.0, self.sinVisitar[0], self.id) print (" Soy el nodo ", self.id, " y mando al nodo ELECTO --> ", mensaje[1] ,"a mi vecino: ", self.sinVisitar[0], " en el tiempo ", newevent.getTime()) self.transmit(newevent) #self.visited = True elif mensaje[0] == "ELECTO": #print("El mensaje que recibi ya es lider") self.lider = mensaje[1] #Ya tenemos lider if int(mensaje[1]) != self.id: #Tiene que avisar que es lider a los otros nodos newevent = Event(mensaje, self.clock+1.0, self.sinVisitar[0], self.id) print (" Soy el nodo ", self.id, " y mando mensaje que ya fue ELECTO --> ", mensaje[1] ,"a mi vecino: ", self.sinVisitar[0], " en el tiempo ", newevent.getTime()) self.transmit(newevent) if event.getName()[0] == "CANDIDATO": if int(event.getName()[1]) > self.id: event.getName()[0] ="CANDIDATO" newevent = Event(event.getName(), self.clock+1.0, self.sinVisitar[0] , self.id) print (" Soy el nodo ", self.id, " y mando al CANDIDATO --> ", event.getName()[1] ,"a mi vecino: ", self.sinVisitar[0], " en el tiempo ", newevent.getTime()) self.transmit(newevent) else: if int(event.getName()[1]) <= self.id and self.visited != True: event.getName()[0] = "CANDIDATO" event.getName()[1] = self.id newevent = Event(event.getName(), self.clock+1.0, self.sinVisitar[0], self.id) print (" Soy el nodo ", self.id, " y mando al CANDIDATO --> ", event.getName()[1] ,"a mi vecino: ", self.sinVisitar[0], " en el tiempo ", newevent.getTime()) self.transmit(newevent) self.visited = True elif int(event.getName()[1]) == self.id: event.getName()[0] = "ELECTO" newevent = Event(event.getName(), self.clock+1.0, self.sinVisitar[0], self.id) print (" Soy el nodo ", self.id, " y mando al nodo ELECTO --> ", event.getName()[1] ,"a mi vecino: ", self.sinVisitar[0], " en el tiempo ", newevent.getTime()) self.transmit(newevent) if event.getName()[0] == "ELECTO": self.lider = event.getName()[1] if int(event.getName()[1]) != self.id: newevent = Event(event.getName(), self.clock+1.0, self.sinVisitar[0], self.id) print (" Soy el nodo ", self.id, " y mando mensaje que ya fue ELECTO --> ", event.getName()[1] ,"a mi vecino: ", self.sinVisitar[0], " en el tiempo ", newevent.getTime()) self.transmit(newevent)
def receive(self, event): #print(f"Soy el nodo {self.id} y mi peso es de {self.pesoNodo}") if event.getName() == "INICIO": for t in range(len(self.neighbors)): #Para poner en verdadero el estado del nodo if event.getSource() == self.neighbors[t]: self.recibi[t] = True if self.visited == False: self.visited = True self.padre = event.getSource() #De quien recibe el mensaje es la fuente if (event.getSource() in self.sinVisitar): #Si la fuente esta en sinVisitar se quita self.sinVisitar.remove(event.getSource()) for i in self.sinVisitar: #Manda INICIO a todos sus vecinos menos a su padre newevent = Event("INICIO", self.clock+1.0, i, self.id, self.pesoNodo) print (" Soy el nodo ", self.id," tengo un peso de ", self.pesoNodo , "mi padre es: ", self.padre ," y mando INICIO a mi vecino: ", i, " en el tiempo ", newevent.getTime()) self.transmit(newevent) alerta=True #Para saber si ya son verdaderos sus estados for r in range(len(self.neighbors)): #Reviso si todos los vecinos ya tienen verdadero en su estado de recibi if self.recibi[r] == False: alerta = False if alerta == True: #Si ya es verdadera toda su lista de vecinos y el padre es diferente del que soy mando INICIO if self.padre != self.id: newevent = Event("REPORTE", self.clock+1.0, self.padre, self.id, self.pesoNodo) print (" Soy el nodo ", self.id, " y mando REPORTE a mi padre ", self.padre, " en el tiempo ", newevent.getTime()) self.transmit(newevent) if event.getName() == "REPORTE": #print(f"Ya soy una hoja con peso {self.pesoNodo} y soy el nodo {self.id} y me llega de {event.getSource()} con valor en peso de {event.getPeso()}") #print(f"El reporte de mi hijo {event.getSource()} es con peso de {event.getPeso()}") for t in range(len(self.neighbors)): #Para poner en verdadero el estado del nodo if event.getSource() == self.neighbors[t]: self.recibi[t] = True if self.padre != self.id: #Es un nodo intermedio, reporta el peso minimo 2 if int(self.pesoNodo) < int(event.getPeso()): self.valorMinimo = self.pesoNodo self.pesoNodo = self.valorMinimo #Ahora tiene un nuevo menor if int(self.pesoNodo) > int(event.getPeso()): self.camino = self.id #El es el camino else: self.valorMinimo = event.getPeso() self.pesoNodo = self.valorMinimo self.camino = event.getSource() #El camino es de quien te llego print(f"El peso menor del nodo {self.id} y el nodo {event.getSource()} es --> {self.valorMinimo}") alerta2=True #Para saber si ya son verdaderos sus estados for r in range(len(self.neighbors)): #Reviso si todos los vecinos ya tienen verdadero en su estado de recibi if self.recibi[r] == False: alerta2 = False if alerta2 == True: newevent = Event("REPORTE", self.clock+1.0, self.padre, self.id, self.valorMinimo) print (" Soy el nodo ", self.id, " y mando REPORTE a mi padre ", self.padre, " en el tiempo ", newevent.getTime()) self.transmit(newevent) if self.padre == self.id: #El nodo ya es el del inicio print("Entre al padre es igual al id") if int(self.valorMinimo) < int(event.getPeso()): self.valorMinimo = self.valorMinimo #self.camino = self.id #El es el camino else: self.valorMinimo = event.getPeso() self.camino = event.getSource() #El camino es de quien te llego print(f"El peso menor del nodo {self.id} y el nodo {event.getSource()} es --> {self.valorMinimo}") alerta2=True #Para saber si ya son verdaderos sus estados for r in range(len(self.neighbors)): #Reviso si todos los vecinos ya tienen verdadero en su estado de recibi if self.recibi[r] == False: alerta2 = False if alerta2 == True: newevent = Event("CAMBIA", self.clock+1.0, self.camino, self.id, self.valorMinimo) print (" Soy el nodo ", self.id, " y mando CAMBIA a mi camino ", self.camino, " en el tiempo ", newevent.getTime()) self.transmit(newevent) if event.getName() == "CAMBIA": if self.id != self.camino: newevent = Event("CAMBIA", self.clock+1.0, self.camino, self.id, self.valorMinimo) print (" Soy el nodo ", self.id, " y mando CAMBIA a mi camino ", self.camino, " en el tiempo ", newevent.getTime()) self.transmit(newevent) else: print(f"Soy el nodo {self.id} y soy el que tiene el peso minimo, el cual es {self.valorMinimo} y lo incremento a {int(self.valorMinimo) + 1}")