X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Firc%2FDefaultConnection.java;h=d352b55a832bd3506263bf081c12a0d0ee0624ce;hb=ebf301a563acaacf0bccbc437ca5316887ad76ca;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..d352b55 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 // @@ -305,7 +316,7 @@ public class DefaultConnection extends AbstractExecutionThreadService implements while (connected) { Reply reply = connectionHandler.readReply(); eventBus.post(new ReplyReceived(this, reply)); - logger.trace(String.format("<< %s", reply)); + logger.trace(String.format("<< %s", addEscapeCharacters(reply.toString()))); String command = reply.command(); List parameters = reply.parameters(); @@ -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); } } @@ -366,6 +378,18 @@ public class DefaultConnection extends AbstractExecutionThreadService implements // PRIVATE METHODS // + private String addEscapeCharacters(String line) { + StringBuilder escaped = new StringBuilder(); + for (char c : line.toCharArray()) { + if (c < 32) { + escaped.append("\\CTRL[").append((int) c).append("]"); + } else { + escaped.append(c); + } + } + return escaped.toString(); + } + /** * Returns an item from the list, or {@link Optional#empty()} if the list is * shorter than required for the given index. @@ -386,6 +410,11 @@ public class DefaultConnection extends AbstractExecutionThreadService implements return Optional.empty(); } + @Override + public String toString() { + return String.format("→ %s:%d", hostname, port); + } + /** Handles input and output for the connection. */ private class ConnectionHandler implements Closeable {