package freenet.client.async;
/** Something that can have a CooldownCacheItem: Anything in the request selection tree, including
* the actual requests at the bottom (but ClientRequestSelector isn't actually a
* RequestSelectionTreeNode at the moment, the root is the priorities in the array on
* ClientRequestSelector; FIXME consistency with RGA.root etc). */
public interface RequestSelectionTreeNode {
/** Return the parent RequestSelectionTreeNode or null if it's not in the tree or is the root (e.g.
* priority classes are kept in an array on ClientRequestSelector). */
public RequestSelectionTreeNode getParentGrabArray();
/** Unless this is a RandomGrabArrayItem, this will return the wakeup time for the subtree
* rooted at this node. For a RandomGrabArrayItem it returns the wakeup time for just that
* single request. */
public long getWakeupTime(ClientContext context, long now);
/** If the current cooldown time is larger than the parameter, reduce it and recurse up the
* tree. If we reach the root and wake it up, then wake up the scheduler. Returns true if
* anything changed. */
public boolean reduceWakeupTime(long wakeupTime, ClientContext context);
/** When a request becomes fetchable, set all the wakeup times above it to 0. Will recurse up
* the tree. */
public void clearWakeupTime(ClientContext context);
}