def lookup_subscribe(self, id, source): first_node = source if betweenE(id, int(self.predecessor.get_id()), int(self.id)): self.subscribe_owner(id, source, first_node) return self.proxy n = self.proxy while not betweenE(id, int(n.get_id()), int(n.successor().get_id())): n = n.closest_preceding_fingerE(id) if int(n.get_id()) == id: n.subscribe_owner(id, source, first_node) return n #Call to introduce some functionality in each forwarder ;) if n != None: source = n.subscribe(id, source) n.successor().subscribe_owner(id, source, first_node) return n.successor()
def lookup_subscribe(self, msg): if betweenE(msg.id, int(self.predecessor.get_id()), int(self.id)): return self.proxy n = self.proxy while not betweenE(msg.id, int(n.get_id()), int(n.successor().get_id())): n = n.closest_preceding_fingerE(msg) if not n.is_alive(): return None if int(n.get_id()) == msg.id: n.deliver(msg) return n #Call to introduce some functionality in each forwarder ;) if n != None: n.subscribe(msg) if n.successor().is_alive(): n.successor().deliver(msg) return n.successor() n.successor().leave() return None
def closest_preceding_fingerE(self, msg): for i in range(k-1,-1,-1): if betweenE(int(self.finger[i].get_id()), int(self.id), msg.id): return self.finger[i] return self.proxy