X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Firc%2FDefaultConnection.java;h=194caf7becb8fb92a4c39e03c67c219906e370b9;hb=82bcd4ba9cb14e6592fb3c4d3c8081319f4da564;hp=cca6aed26c3c4d190943e838e51b6bbc68101ea9;hpb=f8b1b38d714ac20b94867919582cce31ef7b807c;p=xudocci.git diff --git a/src/main/java/net/pterodactylus/irc/DefaultConnection.java b/src/main/java/net/pterodactylus/irc/DefaultConnection.java index cca6aed..194caf7 100644 --- a/src/main/java/net/pterodactylus/irc/DefaultConnection.java +++ b/src/main/java/net/pterodactylus/irc/DefaultConnection.java @@ -30,10 +30,14 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.Socket; +import java.time.Duration; +import java.time.Instant; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; import javax.net.SocketFactory; @@ -63,7 +67,6 @@ 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.eventbus.EventBus; import com.google.common.eventbus.Subscribe; import com.google.common.io.Closeables; @@ -107,19 +110,20 @@ public class DefaultConnection extends AbstractExecutionThreadService implements private String nickname = null; /** The username. */ - private Optional username = Optional.absent(); + private Optional username = Optional.empty(); /** The real name. */ - private Optional realName = Optional.absent(); + private Optional realName = Optional.empty(); /** The optional password for the connection. */ - private Optional password = Optional.absent(); + private Optional password = Optional.empty(); /** The connection handler. */ private ConnectionHandler connectionHandler; /** Whether the connection has already been established. */ private final AtomicBoolean established = new AtomicBoolean(); + private final AtomicReference connectionTime = new AtomicReference<>(); /** * Creates a new connection. @@ -167,19 +171,19 @@ public class DefaultConnection extends AbstractExecutionThreadService implements @Override public Connection username(String username) { - this.username = Optional.fromNullable(username); + this.username = Optional.ofNullable(username); return this; } @Override public Connection realName(String realName) { - this.realName = Optional.fromNullable(realName); + this.realName = Optional.ofNullable(realName); return this; } @Override public Connection password(String password) { - this.password = Optional.fromNullable(password); + this.password = Optional.ofNullable(password); return this; } @@ -230,6 +234,13 @@ public class DefaultConnection extends AbstractExecutionThreadService implements } } + @Override + public java.util.Optional getUptime() { + return established.get() ? + java.util.Optional.of(Duration.between(connectionTime.get(), Instant.now())) : + java.util.Optional.empty(); + } + // // ABSTRACTEXECUTIONTHREADSERVICE METHODS // @@ -358,6 +369,7 @@ public class DefaultConnection extends AbstractExecutionThreadService implements @Subscribe public void connectionEstablished(ConnectionEstablished connectionEstablished) { if (connectionEstablished.connection() == this) { + connectionTime.set(Instant.now()); established.set(true); } } @@ -367,7 +379,7 @@ public class DefaultConnection extends AbstractExecutionThreadService implements // /** - * Returns an item from the list, or {@link Optional#absent()} if the list is + * Returns an item from the list, or {@link Optional#empty()} if the list is * shorter than required for the given index. * * @param list @@ -377,13 +389,13 @@ public class DefaultConnection extends AbstractExecutionThreadService implements * @param * The type of the list items * @return This list item wrapped in an {@link Optional}, or {@link - * Optional#absent()} if the list is not long enough + * Optional#empty()} if the list is not long enough */ private static Optional getOptional(List list, int index) { if (index < list.size()) { - return Optional.fromNullable(list.get(index)); + return Optional.ofNullable(list.get(index)); } - return Optional.absent(); + return Optional.empty(); } /** Handles input and output for the connection. */ @@ -488,11 +500,23 @@ public class DefaultConnection extends AbstractExecutionThreadService implements commandBuilder.append(parameter); } - logger.trace(String.format(">> %s", commandBuilder)); + logger.trace(String.format(">> %s", addEscapeCharacters(commandBuilder))); outputStream.write((commandBuilder.toString() + "\r\n").getBytes("UTF-8")); outputStream.flush(); } + private String addEscapeCharacters(StringBuilder commandBuilder) { + StringBuilder escaped = new StringBuilder(); + for (char c : commandBuilder.toString().toCharArray()) { + if (c < 32) { + escaped.append("\\CTRL[").append((int) c).append("]"); + } else { + escaped.append(c); + } + } + return escaped.toString(); + } + /** * Reads a line of reply from the connection. *