import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
+import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.pterodactylus.irc.event.DccSendReceived;
+import net.pterodactylus.xdcc.util.io.BandwidthCountingInputStream;
+import com.google.common.io.Closeables;
import com.google.common.util.concurrent.AbstractExecutionThreadService;
/**
/** The number of bytes already written. */
private long progress;
+ /** The bandwidth-measuring input stream. */
+ private BandwidthCountingInputStream inputStream;
+
/**
* Creates a new DCC receiver.
*
return progress;
}
+ /**
+ * Returns the current rate of the download.
+ *
+ * @return The current rate of the download, in bytes/second
+ */
+ public long getCurrentRate() {
+ return inputStream.getCurrentRate();
+ }
+
+ /**
+ * Returns the overall rate of the download.
+ *
+ * @return The overall rate of the download, in bytes/second
+ */
+ public long getOverallRate() {
+ return inputStream.getOverallRate();
+ }
+
//
// ABSTRACTEXECUTIONTHREADSERVICE METHODS
//
try {
socket = new Socket(inetAddress, port);
InputStream socketInputStream = socket.getInputStream();
+ inputStream = new BandwidthCountingInputStream(socketInputStream, 5, TimeUnit.SECONDS);
byte[] buffer = new byte[65536];
while (true) {
- int r = socketInputStream.read(buffer);
+ int r = inputStream.read(buffer);
if (r == -1) {
/* yay, eof! */
break;
} catch (IOException ioe1) {
logger.log(Level.WARNING, "I/O error while receiving DCC!", ioe1);
} finally {
+ Closeables.close(inputStream, true);
socket.close();
}
}