diff --git a/src/main/java/me/legrange/mikrotik/ApiConnection.java b/src/main/java/me/legrange/mikrotik/ApiConnection.java index df616b1..f7bf942 100644 --- a/src/main/java/me/legrange/mikrotik/ApiConnection.java +++ b/src/main/java/me/legrange/mikrotik/ApiConnection.java @@ -98,15 +98,13 @@ public class ApiConnection { * @return A command object that can be used to cancel the command. * @throws MikrotikApiException */ - public Command execute(String cmd, ResultListener lis) throws MikrotikApiException { + public String execute(String cmd, ResultListener lis) throws MikrotikApiException { return execute(Parser.parse(cmd), lis); } /** cancel a command */ - public void cancel(Command can) throws MikrotikApiException { - Command cmd = new Command("/cancel"); - cmd.addParameter("tag", can.getTag()); - execute(cmd); + public void cancel(String tag) throws MikrotikApiException { + execute(String.format("/cancel tag=%s", tag)); } private List execute(Command cmd) throws MikrotikApiException { @@ -116,7 +114,7 @@ public class ApiConnection { } - private Command execute(Command cmd, ResultListener lis) throws MikrotikApiException { + private String execute(Command cmd, ResultListener lis) throws MikrotikApiException { String tag = nextTag(); cmd.setTag(tag); listeners.put(tag, lis); @@ -127,7 +125,7 @@ public class ApiConnection { } catch (IOException ex) { throw new ApiConnectionException(ex.getMessage(), ex); } - return cmd; + return tag; } private ApiConnection() { @@ -265,9 +263,14 @@ public class ApiConnection { if (l instanceof ResponseListener) { ResponseListener rl = (ResponseListener) l; if (res instanceof Done) { - rl.completed((Done) res); + if (rl instanceof SyncListener) { + ((SyncListener)rl).completed((Done)res); + } + else { + rl.completed(); + } } else if (res instanceof Error) { - rl.error((Error) res); + rl.error(new ApiCommandException((Error) res)); } } } @@ -409,17 +412,21 @@ public class ApiConnection { private class SyncListener implements ResponseListener { - public synchronized void error(Error err) { - this.err = err; + public synchronized void error(MikrotikApiException ex) { + this.err = ex; notify(); } - - public synchronized void completed(Done done) { + + public void completed() { + notify(); + } + + synchronized void completed(Done done) { if (done.getHash() != null) { Result res = new Result(); res.put("ret", done.getHash()); results.add(res); - } + } notify(); } @@ -427,7 +434,7 @@ public class ApiConnection { results.add(result); } - private List getResults() throws ApiCommandException, ApiConnectionException { + private List getResults() throws MikrotikApiException { try { synchronized (this) { // don't wait if we already have a result. if ((err == null) && results.isEmpty()) { @@ -438,12 +445,12 @@ public class ApiConnection { throw new ApiConnectionException(ex.getMessage(), ex); } if (err != null) { - throw new ApiCommandException(err); + throw err; } return results; } private List results = new LinkedList(); - private Error err; + private MikrotikApiException err; } } \ No newline at end of file diff --git a/src/main/java/me/legrange/mikrotik/Command.java b/src/main/java/me/legrange/mikrotik/Command.java index 44fc173..a49c24d 100644 --- a/src/main/java/me/legrange/mikrotik/Command.java +++ b/src/main/java/me/legrange/mikrotik/Command.java @@ -10,7 +10,7 @@ import java.util.List; * * @author GideonLeGrange */ -public class Command { +class Command { @Override public String toString() { diff --git a/src/main/java/me/legrange/mikrotik/Done.java b/src/main/java/me/legrange/mikrotik/Done.java index e487aa7..9105f4a 100644 --- a/src/main/java/me/legrange/mikrotik/Done.java +++ b/src/main/java/me/legrange/mikrotik/Done.java @@ -4,7 +4,7 @@ package me.legrange.mikrotik; * Internal representation of !done * @author GideonLeGrange */ -public class Done extends Response { +class Done extends Response { Done(String tag) { super(tag); diff --git a/src/main/java/me/legrange/mikrotik/Error.java b/src/main/java/me/legrange/mikrotik/Error.java index 6fb384f..2998741 100644 --- a/src/main/java/me/legrange/mikrotik/Error.java +++ b/src/main/java/me/legrange/mikrotik/Error.java @@ -4,7 +4,7 @@ package me.legrange.mikrotik; * Used to encapsulate API error information. We need to pass both the message and the tag (if one was used). * @author GideonLeGrange */ -public class Error extends Response { +class Error extends Response { Error(String tag, String message) { super(tag); diff --git a/src/main/java/me/legrange/mikrotik/ResponseListener.java b/src/main/java/me/legrange/mikrotik/ResponseListener.java index 2c2c8bd..1ebe1b3 100644 --- a/src/main/java/me/legrange/mikrotik/ResponseListener.java +++ b/src/main/java/me/legrange/mikrotik/ResponseListener.java @@ -7,11 +7,11 @@ package me.legrange.mikrotik; */ public interface ResponseListener extends ResultListener { - /** called if the command associated with this listener experiences a trap */ - void error(Error err); + /** called if the command associated with this listener experiences an error */ + void error(MikrotikApiException ex); /** called when the command associated with this listener is done */ - void completed(Done done); + void completed(); }