X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Firc%2FDefaultConnection.java;h=194caf7becb8fb92a4c39e03c67c219906e370b9;hb=82bcd4ba9cb14e6592fb3c4d3c8081319f4da564;hp=8fe4c4b2057fe0f9416353bff45222c835144532;hpb=f96ea38946952e2a06ccc0d64a92e346b8761f85;p=xudocci.git diff --git a/src/main/java/net/pterodactylus/irc/DefaultConnection.java b/src/main/java/net/pterodactylus/irc/DefaultConnection.java index 8fe4c4b..194caf7 100644 --- a/src/main/java/net/pterodactylus/irc/DefaultConnection.java +++ b/src/main/java/net/pterodactylus/irc/DefaultConnection.java @@ -30,11 +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; @@ -120,6 +123,7 @@ public class DefaultConnection extends AbstractExecutionThreadService implements /** Whether the connection has already been established. */ private final AtomicBoolean established = new AtomicBoolean(); + private final AtomicReference connectionTime = new AtomicReference<>(); /** * Creates a new connection. @@ -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); } } @@ -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. *