Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 5
0
    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())

                
        """
Esempio n. 6
0
 def test_event_setup(self):
     t = time()
     event = Event(t,'test_event')
     self.assertEqual(event.getTime(),t)
     self.assertEqual(event.getLabel(),'test_event')
Esempio n. 7
0
    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)
        """
Esempio n. 8
0
 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)
Esempio n. 9
0
 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}")