1 18 package org.drftpd.slaveselection.filter; 19 20 import java.net.InetAddress ; 21 import java.util.ArrayList ; 22 import java.util.Iterator ; 23 import java.util.Properties ; 24 25 import net.sf.drftpd.NoAvailableSlaveException; 26 import net.sf.drftpd.master.usermanager.User; 27 import net.sf.drftpd.remotefile.LinkedRemoteFileInterface; 28 29 35 public class CycleFilter extends Filter { 36 37 public CycleFilter(FilterChain fc, int i, Properties p) { 38 } 39 40 public void process( 41 ScoreChart scorechart, 42 User user, 43 InetAddress peer, 44 char direction, 45 LinkedRemoteFileInterface dir) 46 throws NoAvailableSlaveException { 47 48 ArrayList tempList = new ArrayList (scorechart.getSlaveScores()); 49 while (true) { 50 if (tempList.isEmpty()) 51 return; 52 ScoreChart.SlaveScore first = 53 (ScoreChart.SlaveScore) tempList.get(0); 54 ArrayList equalList = new ArrayList (); 55 equalList.add(first); 56 tempList.remove(first); 57 for (Iterator iter = tempList.iterator(); iter.hasNext();) { 58 ScoreChart.SlaveScore match = 59 (ScoreChart.SlaveScore) iter.next(); 60 if (match.compareTo(first) == 0) { 61 equalList.add(match); 62 iter.remove(); 63 } 64 } 65 ScoreChart.SlaveScore leastUsed = first; 66 for (Iterator iter = equalList.iterator(); iter.hasNext();) { 67 ScoreChart.SlaveScore match = 68 (ScoreChart.SlaveScore) iter.next(); 69 if (match.getRSlave().getLastTransferForDirection(direction) 70 < leastUsed.getRSlave().getLastTransferForDirection( 71 direction)) { 72 leastUsed = match; 73 } 74 } 75 if (leastUsed != null) { 76 leastUsed.addScore(1); 77 } 78 } 79 } 80 } 81 | Popular Tags |