package lbms.plugins.mldht.azureus;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
import org.gudy.azureus2.plugins.download.Download;
/**
* @author Damokles
*
*/
public class DelayedAnnounce implements Delayed {
private long timestamp;
private Download download;
/**
* @param download Download to delay
* @param delay in Microseconds
*/
public DelayedAnnounce (Download download, long delay) {
this(download, delay, TimeUnit.MILLISECONDS);
}
/**
* @param download Download to delay
* @param delay delay in the given TimeUnit
* @param unit TimeUnit of the delay
*/
public DelayedAnnounce (Download download, long delay, TimeUnit unit) {
this.download = download;
timestamp = System.currentTimeMillis()
+ TimeUnit.MILLISECONDS.convert(delay, unit);
}
/*
* (non-Javadoc)
*
* @see java.util.concurrent.Delayed#getDelay(java.util.concurrent.TimeUnit)
*/
public long getDelay (TimeUnit unit) {
return unit.convert(timestamp - System.currentTimeMillis(),
TimeUnit.MILLISECONDS);
}
/*
* (non-Javadoc)
*
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo (Delayed o) {
long x = getDelay(TimeUnit.MILLISECONDS)
- o.getDelay(TimeUnit.MILLISECONDS);
if (x > 0) {
return 1;
} else if (x < 0) {
return -1;
}
return 0;
}
/**
* @return the download
*/
public Download getDownload () {
return download;
}
}