package freenet.support;
import freenet.client.async.ClientContext;
import freenet.client.async.RequestSelectionTreeNode;
public interface RandomGrabArrayItem extends RequestSelectionTreeNode {
@Override
/** @return -1 if the item is no longer needed and should be removed, because it
* is cancelled, is completing with the blocks it has already, etc. 0 if there are
* requests to send now. Otherwise the time at which there will be more requests to
* send. If all requests are in flight, returns a time in the distant future e.g.
* Long.MAX_VALUE. In both the latter cases, will add itself to the cooldown cache
* via the RandomGrabArrayExclusionList. LOCKING: Should hold as few locks as
* reasonably possible, called inside RGA lock.
* @param excluding Can be null.
* @param container Database handle.
*/
public long getWakeupTime(ClientContext context, long now);
/** Does this RandomGrabArrayItem support remembering where it is registered? */
public boolean knowsParentGrabArray();
/** Notify the item that it has been registered on a specific RandomGrabArray */
public void setParentGrabArray(RandomGrabArray parent);
@Override
/** If the item remembers its parent RandomGrabArray, return it */
public RandomGrabArray getParentGrabArray();
}