package org.limewire.nio;
/**
* Defines a throttle interface; a throttle is a mechanism that controls
* the flow of data.
*/
public interface Throttle {
/**
* Interests this listener in receiving a bandwidthAvailable callback.
*/
public void interest(ThrottleListener writer);
/**
* Requests some data for writing from this Throttle.
*/
public int request();
/**
* Releases some unwritten requested data back to the throttle.
*/
public void release(int amount);
/**
* Sets the rate of the throttle in bytes / second.
*/
public void setRate(float rate);
/**
* @return the time in milliseconds when the next tick will begin.
*/
public long nextTickTime();
}