/**
* Copyright (c) 2009 - 2010 AppWork UG(haftungsbeschränkt) <e-mail@appwork.org>
*
* This file is part of org.appwork.utils.net.throttledconnection
*
* This software is licensed under the Artistic License 2.0,
* see the LICENSE file or http://www.opensource.org/licenses/artistic-license-2.0.php
* for details
*/
package org.appwork.utils.net.throttledconnection;
import java.io.InputStream;
import org.appwork.utils.speedmeter.SpeedMeterInterface;
/**
* @author daniel
*
*/
public class MeteredThrottledInputStream extends ThrottledInputStream implements SpeedMeterInterface {
private SpeedMeterInterface speedmeter = null;
private long time = 0;
private long speed = 0;
private long lastTime;
private long lastTrans;
private long transferedCounter3;
/**
* @param in
*/
public MeteredThrottledInputStream(final InputStream in) {
super(in);
}
public MeteredThrottledInputStream(final InputStream in, final SpeedMeterInterface speedmeter) {
super(in);
this.speedmeter = speedmeter;
}
/*
* (non-Javadoc)
*
* @see org.appwork.utils.SpeedMeterInterface#getSpeedMeter()
*/
public synchronized long getSpeedMeter() {
if (this.time == 0) {
this.transferedCounter3 = this.transferedCounter;
this.time = System.currentTimeMillis();
return 0;
}
if (System.currentTimeMillis() - this.time < 1000) {
if (this.speedmeter != null) { return this.speedmeter.getSpeedMeter(); }
return this.speed;
}
final long tmp2 = this.transferedCounter;
this.lastTrans = tmp2 - this.transferedCounter3;
final long tmp = System.currentTimeMillis();
this.lastTime = tmp - this.time;
this.transferedCounter3 = tmp2;
this.time = tmp;
if (this.speedmeter != null) {
this.speedmeter.putSpeedMeter(this.lastTrans, this.lastTime);
this.speed = this.speedmeter.getSpeedMeter();
return this.speed;
} else {
this.speed = this.lastTrans / this.lastTime * 1000;
return this.speed;
}
}
/*
* (non-Javadoc)
*
* @see org.appwork.utils.SpeedMeterInterface#putSpeedMeter(long, long)
*/
public void putSpeedMeter(final long bytes, final long time) {
}
/*
* (non-Javadoc)
*
* @see org.appwork.utils.SpeedMeterInterface#resetSpeedMeter()
*/
public synchronized void resetSpeedMeter() {
if (this.speedmeter != null) {
this.speedmeter.resetSpeedMeter();
}
this.time = System.currentTimeMillis();
this.speed = 0;
this.transferedCounter3 = this.transferedCounter;
}
}