From 380eca88742353dd1b2411c50e6bf1a964fe19c2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Thu, 2 May 2013 21:05:37 +0200 Subject: [PATCH] Expose input and output rate of connection. --- .../java/net/pterodactylus/irc/Connection.java | 49 ++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/pterodactylus/irc/Connection.java b/src/main/java/net/pterodactylus/irc/Connection.java index 0cbbae8..2feaec4 100644 --- a/src/main/java/net/pterodactylus/irc/Connection.java +++ b/src/main/java/net/pterodactylus/irc/Connection.java @@ -18,6 +18,7 @@ package net.pterodactylus.irc; import static com.google.common.base.Preconditions.checkState; +import static java.util.concurrent.TimeUnit.SECONDS; import java.io.BufferedReader; import java.io.Closeable; @@ -60,6 +61,8 @@ import net.pterodactylus.irc.event.PrivateMessageReceived; import net.pterodactylus.irc.event.PrivateNoticeReceived; import net.pterodactylus.irc.event.UnknownReplyReceived; import net.pterodactylus.irc.util.RandomNickname; +import net.pterodactylus.xdcc.util.io.BandwidthCountingInputStream; +import net.pterodactylus.xdcc.util.io.BandwidthCountingOutputStream; import com.google.common.base.Optional; import com.google.common.collect.Maps; @@ -237,6 +240,24 @@ public class Connection extends AbstractExecutionThreadService implements Servic // /** + * Returns the current rate of the connection’s incoming side. + * + * @return The current input rate (in bytes per second) + */ + public long getInputRate() { + return (connectionHandler != null) ? connectionHandler.getInputRate() : 0; + } + + /** + * Returns the current rate of the connection’s outgoing side. + * + * @return The current output rate (in bytes per second) + */ + public long getOutputRate() { + return (connectionHandler != null) ? connectionHandler.getOutputRate() : 0; + } + + /** * Checks whether the given source is the client represented by this * connection. * @@ -587,7 +608,10 @@ public class Connection extends AbstractExecutionThreadService implements Servic private class ConnectionHandler implements Closeable { /** The output stream of the connection. */ - private final OutputStream outputStream; + private final BandwidthCountingOutputStream outputStream; + + /** The input stream. */ + private final BandwidthCountingInputStream inputStream; /** The input stream of the connection. */ private final BufferedReader inputStreamReader; @@ -604,8 +628,9 @@ public class Connection extends AbstractExecutionThreadService implements Servic * if the encoding (currently “UTF-8”) is not valid */ private ConnectionHandler(InputStream inputStream, OutputStream outputStream) throws UnsupportedEncodingException { - this.outputStream = outputStream; - inputStreamReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); + this.outputStream = new BandwidthCountingOutputStream(outputStream, 5, SECONDS); + this.inputStream = new BandwidthCountingInputStream(inputStream, 5, SECONDS); + inputStreamReader = new BufferedReader(new InputStreamReader(this.inputStream, "UTF-8")); } // @@ -613,6 +638,24 @@ public class Connection extends AbstractExecutionThreadService implements Servic // /** + * Returns the current rate of the connection’s incoming side. + * + * @return The current input rate (in bytes per second) + */ + public long getInputRate() { + return inputStream.getCurrentRate(); + } + + /** + * Returns the current rate of the connection’s outgoing side. + * + * @return The current output rate (in bytes per second) + */ + public long getOutputRate() { + return outputStream.getCurrentRate(); + } + + /** * Sends a command with the given parameters, skipping all {@link * Optional#absent()} optionals. * -- 2.7.4