def bubble(self, packet, state): '''''' if len(self.community) == 0: return False dest = packet.destination community_of = lambda n: self.network.community[n] same_community = lambda a, b: community_of(a) == community_of(b) gp_of = lambda n: self.network.community.get_gp(n) lp_of = lambda n: self.network.community.get_lp(n) max = lambda a, b: a if a[0] >= b[0] else b max_gp = (-1, None) if same_community(self, dest): max_lp = (lp_of(self), self) for met in self.links: if same_community(met, dest): max_lp = max((lp_of(met), met), max_lp) if max_lp[1] is not self: self.send(max_lp[1], packet) return True else: max_gp = (-1, None) max_lp = (-1, None) for met in self.links: if same_community(met, dest): max_lp = max((lp_of(met), met), max_lp) max_gp = max((gp_of(met), met), max_gp) if max_lp[1] is not None: self.send(max_lp[1], packet) return True if max_gp[1] is not None: self.send(max_gp[1], packet) return True return False