Beispiel #1
0
    def addPeer(self, name, port):
        '''process for adding a peer to the network. Checks network for lost nodes
            before adding new ones
            name - ip address of new node to be added
            port - port of new node to be added
        '''
        result = {}

        # ping ultrapeers to verify network
        for id,up in self.upeers.items():
            if send_ping(up.name) == False:
                print "Lost Ultrapeer ", id
                del self.upeers[id]
                self.outOfOrder += 1
                self.upeerCount -= 1

        upeer = self.findUPeer()
        if upeer is None:
            # new peer is ultra peer
            result['isUltra'] = True
            self.upeerCount += 1

            if(self.upeerCount>1):
                print "Telling " + self.upeers[0].name + " to search"
                send_tellsearch("", self.upeers[0].name)
            
            # adjust ultrapeers
            if  self.outOfOrder != 0:
                self.outOfOrder -= 1
                for i in range(self.upeerCount):
                    if self.upeers.has_key(i) == False:
                        newNode = Node(name, port, i)
                        self.upeers[i]= newNode
                        self.linkUPeer(newNode)
                        result['uPeers'] = newNode.upeers.keys()
                        result['upId'] = newNode.upeerid
                        print "Node %s added to network as Ultrapeer %d." % (name, newNode.upeerid)
                        return result
            # put new upeer at end of upeers
            newNode = Node(name, port, self.upeerCount)
            self.upeers[self.upeerCount]= newNode
            self.linkUPeer(newNode)
            result['uPeers'] = newNode.upeers.keys()
            result['upId'] = newNode.upeerid
            print "Node %s added to network as Ultrapeer %d." % (name, newNode.upeerid)

            return result
            
        else:
            # new peer is not an ultra peer
            newNode = Node(name, port, -1)
            newNode.upeer = upeer
            upeer.peers[name] = newNode
            result['isUltra'] = False
            result['uPeer'] = upeer.name
            print "Node %s added to network under Ultrapeer %s" % (name, upeer.upeerid)

            return result
Beispiel #2
0
    def pingNodes(self):
        '''ping all connected ultra peers and sub peers, removing them if no reply.
            if self is not an ultrapeer, reconnect to gateway if lost ultrapeer
        '''
        while True:

            time.sleep(5)
            if(self.isUltra):
                if self.upeers is not None:
                    for up in self.upeers:
                        if(http.send_ping(up) is False):
                            self.upeers.remove(up)
                if self.peers is not None:
                    for p in self.peers:
                        if(http.send_ping(p) is False):
                            self.peers.remove(p)
                            http.send_gateway_remove_peer(p)
                            #update gateway peer count
            else:
                if(http.send_ping(self.upeer) is False):
                    time.sleep(5)
                    self.reconnect()
Beispiel #3
0
    def addPeer(self, name):
        print "ADDING A PEEEEEEEEEEEEEEEEEEEERR"
        result = {}
        for id,up in self.upeers.items():
            if send_ping(up.name) == False:
                print "Lost Ultrapeer ", id
                del self.upeers[id]
                self.outOfOrder += 1
                self.upeerCount -= 1


        upeer = self.findUPeer()
        if upeer is None:
            result['isUltra'] = True
            self.upeerCount += 1
            if  self.outOfOrder != 0:
                self.outOfOrder -= 1
                for i in range(self.upeerCount):
                    if self.upeers.has_key(i) == False:
                        print "HERE 1"
                      
                        newNode = Node(name, i)
                        self.upeers[i]= newNode
                        self.linkUPeer(newNode)
                        result['uPeers'] = newNode.upeers.keys()
                        print "Node %s added to network as Ultrapeer %d." % (name, newNode.upeerid)

                        return result
            


            print "HERE2"
            newNode = Node(name, self.upeerCount)
            self.upeers[self.upeerCount]= newNode
            self.linkUPeer(newNode)
            result['uPeers'] = newNode.upeers.keys()
            print "Node %s added to network as Ultrapeer %d." % (name, newNode.upeerid)

            return result
            
        else:
            newNode = Node(name, -1)
            newNode.upeer = upeer
            upeer.peers[name] = newNode
            result['isUltra'] = False
            result['uPeer'] = upeer.name
            print "Node %s added to network under Ultrapeer %s" % (name, upeer.upeerid)

            return result