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
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()
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