import java.io.IOException;
import java.util.logging.Logger;
+import net.pterodactylus.sonitus.data.AbstractFilter;
+import net.pterodactylus.sonitus.data.DataPacket;
+import net.pterodactylus.sonitus.data.Filter;
import net.pterodactylus.sonitus.data.Metadata;
/**
* Rate limiting filter that only passes a specified amount of data per second
- * from its {@link net.pterodactylus.sonitus.data.Source} to its {@link
- * net.pterodactylus.sonitus.data.Sink}.
+ * from its source to its sinks.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
-public class RateLimitingFilter extends DummyFilter {
+public class RateLimitingFilter extends AbstractFilter implements Filter {
/** The logger. */
private static final Logger logger = Logger.getLogger(RateLimitingFilter.class.getName());
/**
* Creates a new rate limiting filter.
*
+ * @param name
+ * The name of the filter
* @param rate
- * The limiting rate (in bytes/second)
*/
- public RateLimitingFilter(int rate) {
- this(rate, 0);
+ public RateLimitingFilter(String name, int rate) {
+ this(name, rate, 0);
}
/**
* Creates a new rate limiting filter.
*
+ * @param name
+ * The name of the filter
* @param rate
* The limiting rate (in bytes/second)
* @param fastStartTime
* The amount of time at the start of the filtering during which no delay
- * will occur (in milliseconds)
*/
- public RateLimitingFilter(int rate, long fastStartTime) {
+ public RateLimitingFilter(String name, int rate, long fastStartTime) {
+ super(name);
this.rate = rate;
this.counter = (long) (-rate * (fastStartTime / 1000.0));
}
}
@Override
- public void process(byte[] buffer) throws IOException {
- super.process(buffer);
+ public void process(DataPacket dataPacket) throws IOException {
+ super.process(dataPacket);
/* delay. */
- counter += buffer.length;
+ counter += dataPacket.buffer().length;
long waitTime = (long) (counter / (rate / 1000.0));
while ((System.currentTimeMillis() - startTime) < waitTime) {
try {