This commit is contained in:
Clairton Luz 2015-04-27 22:55:39 +00:00
commit b7349aab9f
4 changed files with 101 additions and 40 deletions

View File

@ -5,12 +5,14 @@ import me.legrange.mikrotik.ApiConnection;
/**
*
* @author gideon
* @author clairtonluz
*/
abstract class Example {
protected void connect() throws Exception {
protected ApiConnection connect() throws Exception {
con = ApiConnection.connect(Config.HOST, ApiConnection.DEFAULT_PORT, 2000);
con.login(Config.USERNAME, Config.PASSWORD);
return con;
}
protected void disconnect() throws Exception {

View File

@ -0,0 +1,30 @@
package examples;
import me.legrange.mikrotik.ApiConnection;
import me.legrange.mikrotik.MikrotikApiException;
import java.util.List;
import java.util.Map;
/**
* Example 10: The try-with-resources Statement
*
* @author clairtonluz
*/
public class Example10 extends Example {
public static void main(String... args) throws Exception {
Example10 ex = new Example10();
try (ApiConnection c = ex.connect()) {
ex.test();
}
System.out.printf("\nisConnected = %B",ex.con.isConnected());
}
private void test() throws MikrotikApiException, InterruptedException {
List<Map<String, String>> res = con.execute("/interface/ethernet/print");
for (Map<String, String> r : res) {
System.out.println(r);
}
}
}

View File

@ -1,28 +1,39 @@
package me.legrange.mikrotik;
import me.legrange.mikrotik.impl.ApiConnectionImpl;
import java.util.List;
import java.util.Map;
import me.legrange.mikrotik.impl.ApiConnectionImpl;
/**
* The Mikrotik API connection. This is the class used to connect to a remote
* Mikrotik and send commands to it.
*
* @author GideonLeGrange
* @author clairtonluz
*/
public abstract class ApiConnection {
public abstract class ApiConnection implements AutoCloseable {
/** default TCP port used by Mikrotik API */
/**
* default TCP port used by Mikrotik API
*/
public static final int DEFAULT_PORT = 8728;
/** default TCP TLS port used by Mikrotik API */
/**
* default TCP TLS port used by Mikrotik API
*/
public static final int DEFAULT_TLS_PORT = 8729;
/** default connection timeout to use when opening the connection */
/**
* default connection timeout to use when opening the connection
*/
public static final int DEFAULT_CONNECTION_TIMEOUT = 60000;
/** default command timeout used for synchronous commands */
/**
* default command timeout used for synchronous commands
*/
public static final int DEFAULT_COMMAND_TIMEOUT = 60000;
/**
* Create a new API connection to the give device on the supplied port, using anonymous TLS for encryption.
*
* @param host The host to which to connect.
* @param port The TCP port to use.
* @param timeout The connection timeout to use when opening the connection.
@ -36,6 +47,7 @@ public abstract class ApiConnection {
/**
* Create a new API connection to the give device on the supplied port, using anonymous TLS for encryption.
*
* @param host The host to which to connect.
* @param port The TCP port to use.
* @return The ApiConnection
@ -48,6 +60,7 @@ public abstract class ApiConnection {
/**
* Create a new API connection to the give device on the default API port, using anonymous TLS for encryption.
*
* @param host The host to which to connect.
* @return The ApiConnection
* @throws me.legrange.mikrotik.MikrotikApiException Thrown if there is a problem connecting
@ -58,6 +71,7 @@ public abstract class ApiConnection {
/**
* Create a new API connection to the give device on the supplied port
*
* @param host The host to which to connect.
* @param port The TCP port to use.
* @param timeout The connection timeout to use when opening the connection.
@ -70,6 +84,7 @@ public abstract class ApiConnection {
/**
* Create a new API connection to the give device on the supplied port
*
* @param host The host to which to connect.
* @param port The TCP port to use.
* @return The ApiConnection
@ -81,6 +96,7 @@ public abstract class ApiConnection {
/**
* Create a new API connection to the give device on the default API port.
*
* @param host The host to which to connect.
* @return The ApiConnection
* @throws me.legrange.mikrotik.MikrotikApiException Thrown if there is a problem connecting
@ -98,6 +114,7 @@ public abstract class ApiConnection {
/**
* Disconnect from the remote API
*
* @throws me.legrange.mikrotik.MikrotikApiException Thrown if there is a problem disconnecting
*/
public abstract void disconnect() throws MikrotikApiException;
@ -112,14 +129,17 @@ public abstract class ApiConnection {
*/
public abstract void login(String username, String password) throws MikrotikApiException, InterruptedException;
/** execute a command and return a list of results.
/**
* execute a command and return a list of results.
*
* @param cmd Command to execute
* @return The list of results
* @throws me.legrange.mikrotik.MikrotikApiException
*/
public abstract List<Map<String, String>> execute(String cmd) throws MikrotikApiException;
/** execute a command and attach a result listener to receive it's results.
/**
* execute a command and attach a result listener to receive it's results.
*
* @param cmd Command to execute
* @param lis ResultListener that will receive the results
@ -128,15 +148,19 @@ public abstract class ApiConnection {
*/
public abstract String execute(String cmd, ResultListener lis) throws MikrotikApiException;
/** cancel a command
/**
* cancel a command
*
* @param tag The tag of the command to cancel
* @throws me.legrange.mikrotik.MikrotikApiException Thrown if there is a problem canceling the command */
* @throws me.legrange.mikrotik.MikrotikApiException Thrown if there is a problem canceling the command
*/
public abstract void cancel(String tag) throws MikrotikApiException;
/** set the command timeout. The command timeout is used to time out API
/**
* set the command timeout. The command timeout is used to time out API
* commands after a specific time.
*
* <p/>
* Note: This is not the same as the timeout value passed in the connect() and
* connectTLS() methods. This timeout is specific to synchronous commands, that
* timeout is applied to opening the API socket.

View File

@ -200,6 +200,11 @@ public final class ApiConnectionImpl extends ApiConnection {
private Integer _tag = 0;
private int timeout = ApiConnection.DEFAULT_COMMAND_TIMEOUT;
@Override
public void close() throws ApiConnectionException {
disconnect();
}
/**
* thread to read data from the socket and process it into Strings
*/