package p2pp;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.klomp.snark.Peer;
import org.klomp.snark.PeerCoordinator;
public class LogDownloadProgressListener implements DownloadProgressListener {
private PeerCoordinator coordinator;
private int nbOfPieces;
private int piecesDownloaded = 0;
private int downloadedServer = 0;
private long started = System.currentTimeMillis();
protected Logger log = Logger.getLogger("org.klomp.snark.peer");
public LogDownloadProgressListener(int pieces) {
this.nbOfPieces = pieces;
}
@Override
public void pieceDownloaded(Peer peer, int piece) {
String from = peer == null ? WebSeed.description : peer.toString();
if(peer == null)
downloadedServer++;
piecesDownloaded++;
double progress = ((double) piecesDownloaded) / ((double) nbOfPieces);
log.log(Level.INFO, "Piece " + piece + " downloaded from " + from +
". Progress so far " + (progress * 100) + "%");
}
@Override
public void downloadComplete() {
coordinator.halt();
long duration = System.currentTimeMillis() - started;
double server = ((double) downloadedServer) / ((double) nbOfPieces);
double peers = 1.0 - server;
log.log(Level.INFO, "Download completed. Duration " + (duration / 1000) + " seconds.\n" +
"Server = " + (server * 100) + "% - Peers = " + (peers * 100) + "%");
}
@Override
public void setPeerCoordinator(PeerCoordinator coord) {
this.coordinator = coord;
}
@Override
public void pieceRequested(Peer peer, int piece) {
String from = peer == null ? WebSeed.description : peer.toString();
log.log(Level.INFO, "Piece " + piece + " requested from " + from);
}
}