Esempio n. 1
0
    def join_network(self):

        # start event listener thread
        t = threading.Thread(target=self.start)
        t.daemon = True
        t.start()

        # if we are root
        if self.is_root == 1:
            self.root = None
            self.successor = None
            self.sucsuccessor = None
            self.predecessor = None
            self.sec_successor = None
            self.toString()

        # if we are peer
        else:
            self.predecessor = None
            self.sucsuccessor = None

            # contact the root to find our successor
            self.root = Proxy(self.root_addr.ip_addr, self.root_addr.port)
            self.successor = self.root.find_successor(self.address.NODEID)

            # set our predecessor
            succ = Proxy(self.successor.ip_addr, self.successor.port)
            tmp = succ.getpredec()
            if not tmp:
                succ.notify(self.address)
            else:
                pred = Proxy(tmp.ip_addr, tmp.port)
                pred.revnotify(self.address)
                pred.revnotify2(self.successor)
                self.predecessor = tmp
                succ.notify(self.address)

            # get successor's successor
            self.sucsuccessor = succ.getsucc()

            # inherit necessary files from successor
            self.inherit()

            # print current state of the node
            self.toString()

        # start stabilizing thread
        s = threading.Thread(target=self.periodical)
        s.daemon = True
        s.start()

        # don't kill the main thread so that deamon threads can survive
        while True:
            time.sleep(1)