def _printStats(self): #Print PeerList t = [] for i in self._peersConn.values(): t.append( "( {0}@{1}/{2}/{3} {4}|{5}|{6}|{7} , {8}|{9})".format(i[1], \ i[2].getUploadRate(), \ i[2].getDownloadRate(), \ i[0], \ #i[2].getAverageDownloadRate(), \ 1 if i[2].chocking == True else 0, \ 1 if i[2].interested == True else 0, \ 1 if i[2].peerIsChocking() == True else 0, \ 1 if i[2].peerIsInterested() == True else 0, \ i[3], \ "N" if i[4] == self.NO_SLOT else "T" if i[4] == self.TFT_SLOT else "P" if i[4] == self.TFT_POSSIBLE_SLOT else "O", \ ) ) Log.pLI(self, "[{}] DL {}/{} i{} pA{} TFT {}/{}, OU {}/{} , U/D [{}/{}], PeerList {}".format( self.__class__.__name__, \ self._torrent.getNumberOfFinishedPieces(), \ self._torrent.getNumberOfPieces(), \ len(self.piecesQueue), \ self._pieceAvailability, \ self._nTFTSlots, self._maxTFTSlots, \ self._nOUSlots, self._maxOUSlots, \ self._uploadRateLastTick, self._downloadRateLastTick, \ t ) )
def updateLocalConnectionState(self): self._activeDownloadBandwidthUsage = 0 if(self._leaveNextRound == True): self._torrent.tracker.remPeer(self) self._disconnectConnections() self.removeSimElement() Log.pLI(self, "Leaving torrent ...") if self._torrent.isFinished() == True : if( self._downloadEnd == -1): self._downloadEnd = SSimulator().tick #So check if we want to leave or stay as a seeder if( self._leaveTorrent() == True ): self._leaveNextRound = True #Leave next round, if not, the peer wont be seen by the observer as finished! else: if( (SSimulator().tick >= self._nextPieceQueueUpdate) or (len(self.piecesQueue) == 0) ): Log.pLD(self, "Getting new piece list for downloading ..." ) (self.piecesQueue, self._pieceAvailability) = self.pieceSelection(self._pieceRandomizeCount) #Simulates the queuing of piece requests to other peers self._nextPieceQueueUpdate = SSimulator().tick + 5 #Shedule next update #Call updateLocalState() on each connection and update their averageDownloadRate finishedPieces = self._torrent.getFinishedPieces() for i in self._peersConn.values() : i[2].updateLocalState(finishedPieces)
def peerLogic(self): self._preLogicOperations() if(self._sleepTime > 0): self._sleepTime -= 1 return if( (self._runOUFlag == True) or (self._runTFTFlag == True) ): printChosen = True tftChosen = [] ouChosen = [] else: printChosen = False if(self._torrent.isFinished() == False): #Leecher if( self._runTFTFlag == True): self._runTFTFlag = False nSlots = self._maxTFTSlots tftChosen = self.runTFT(nSlots, self._nextTFTPhaseStart) if( self._runOUFlag == True ): self._runOUFlag = False nSlots = self._maxOUSlots ouChosen = self.runOU(nSlots, self._nextOUPhaseStart) else: #Seeder Part if( self._runOUFlag == True ): self._runOUFlag = False self._nextOUPhaseStart = SSimulator().tick + 10 ouChosen = self.runSeederOU(4, 1, 10) #Keep 4, get 1 random if(printChosen == True): Log.pLI(self, "TFTChosen {} until {}, OUChosen {} until {}".format( tftChosen, self._nextTFTPhaseStart, ouChosen, self._nextOUPhaseStart ) )