package p2pp; import java.util.HashMap; import java.util.Map; import org.klomp.snark.Peer; public class LiveBTPeer { private long downloaded; private long timeStart; private long sizeStart; private double speed = 0; //bytes per second public void addDownloaded(long down) { downloaded += down; } public double currentSpeed() { return speed; } public double updateSpeed() { long tmp = System.currentTimeMillis(); long deltaTime = (tmp - timeStart) / 1000; this.timeStart = tmp; long deltaSize = (downloaded - sizeStart); this.sizeStart = downloaded; if(deltaTime != 0) this.speed = ((double) deltaSize) / ((double) deltaTime); return speed; } static class LiveBTPeerOrganizer { private Map<Peer, LiveBTPeer> peers = new HashMap<Peer, LiveBTPeer>(); public double getCurrentSpeed(Peer peer) { return getPeer(peer).currentSpeed(); } public double updateSpeed(Peer peer) { return getPeer(peer).updateSpeed(); } public void updateDownloaded(Peer peer, long down) { LiveBTPeer live = getPeer(peer); live.addDownloaded(down); } public void removePeer(Peer peer) { peers.remove(peer); } public void dumpList() { System.out.println("Velocity List"); for(Peer peer : peers.keySet()) { System.out.println("--------------------------------------------"); System.out.println("v(" + peer.toString() + ") = " + peers.get(peer).currentSpeed()); } } private LiveBTPeer getPeer(Peer peer) { LiveBTPeer live = peers.get(peer); if(live == null) { live = new LiveBTPeer(); live.sizeStart = 0; live.timeStart = System.currentTimeMillis(); peers.put(peer, live); } return live; } } }