From 61691cb9a6cbda762d4f7cf01b266927c32df75c Mon Sep 17 00:00:00 2001 From: Gideon le Grange Date: Tue, 28 Apr 2015 09:52:31 +0200 Subject: [PATCH] Implemented java.lang.AutoCloseable --- .../me/legrange/mikrotik/ApiConnection.java | 6 ++- .../mikrotik/impl/ApiConnectionImpl.java | 40 ++++++++++--------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/main/java/me/legrange/mikrotik/ApiConnection.java b/src/main/java/me/legrange/mikrotik/ApiConnection.java index 47ac836..994895e 100644 --- a/src/main/java/me/legrange/mikrotik/ApiConnection.java +++ b/src/main/java/me/legrange/mikrotik/ApiConnection.java @@ -10,7 +10,7 @@ import me.legrange.mikrotik.impl.ApiConnectionImpl; * * @author GideonLeGrange */ -public abstract class ApiConnection { +public abstract class ApiConnection implements AutoCloseable { /** default TCP port used by Mikrotik API */ public static final int DEFAULT_PORT = 8728; @@ -146,4 +146,8 @@ public abstract class ApiConnection { */ public abstract void setTimeout(int timeout) throws MikrotikApiException; + @Override + public abstract void close() throws ApiConnectionException; + + } \ No newline at end of file diff --git a/src/main/java/me/legrange/mikrotik/impl/ApiConnectionImpl.java b/src/main/java/me/legrange/mikrotik/impl/ApiConnectionImpl.java index 2fa6ae8..1443707 100644 --- a/src/main/java/me/legrange/mikrotik/impl/ApiConnectionImpl.java +++ b/src/main/java/me/legrange/mikrotik/impl/ApiConnectionImpl.java @@ -54,19 +54,7 @@ public final class ApiConnectionImpl extends ApiConnection { @Override public void disconnect() throws ApiConnectionException { - if (!connected) { - throw new ApiConnectionException(("Not/no longer connected to remote Mikrotik")); - } - connected = false; - processor.interrupt(); - reader.interrupt(); - try { - in.close(); - out.close(); - sock.close(); - } catch (IOException ex) { - throw new ApiConnectionException(String.format("Error closing socket: %s", ex.getMessage()), ex); - } + close(); } @Override @@ -101,12 +89,28 @@ public final class ApiConnectionImpl extends ApiConnection { public void setTimeout(int timeout) throws MikrotikApiException { if (timeout > 0) { this.timeout = timeout; - } - else { + } else { throw new MikrotikApiException(String.format("Invalid timeout value '%d'; must be postive", timeout)); } } - + + @Override + public void close() throws ApiConnectionException { + if (!connected) { + throw new ApiConnectionException(("Not/no longer connected to remote Mikrotik")); + } + connected = false; + processor.interrupt(); + reader.interrupt(); + try { + in.close(); + out.close(); + sock.close(); + } catch (IOException ex) { + throw new ApiConnectionException(String.format("Error closing socket: %s", ex.getMessage()), ex); + } + } + private List> execute(Command cmd, int timeout) throws MikrotikApiException { SyncListener l = new SyncListener(); execute(cmd, l); @@ -164,7 +168,7 @@ public final class ApiConnectionImpl extends ApiConnection { Socket clear = new Socket(); SocketAddress addr = new InetSocketAddress(ia, port); clear.connect(new InetSocketAddress(ia, port), timeOut); - return clear; + return clear; } /** @@ -481,7 +485,7 @@ public final class ApiConnectionImpl extends ApiConnection { while (!complete && (waitTime > 0)) { long start = System.currentTimeMillis(); wait(waitTime); - waitTime = waitTime - (int)(System.currentTimeMillis() - start); + waitTime = waitTime - (int) (System.currentTimeMillis() - start); if ((waitTime <= 0) && !complete) { err = new ApiConnectionException(String.format("Command timed out after %d ms", timeout)); }