Beispiel #1
0
    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 ) )
Beispiel #2
0
    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)            
Beispiel #3
0
  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 ) )