package com.davfx.ninio.script.util;
import java.io.IOException;
import com.davfx.ninio.common.Queue;
import com.davfx.ninio.http.HttpClient;
import com.davfx.ninio.ping.util.PingClientCache;
import com.davfx.ninio.script.JsonScriptRunner;
import com.davfx.ninio.script.QueueScriptRunner;
import com.davfx.ninio.script.RegisteredFunctionsScriptRunner;
import com.davfx.ninio.script.ScriptFunction;
import com.davfx.ninio.script.ScriptRegister;
import com.davfx.ninio.script.SimpleScriptRunner;
import com.davfx.ninio.script.SingleExecutorScriptRunner;
import com.davfx.ninio.snmp.util.SnmpClientCache;
import com.davfx.ninio.telnet.util.WaitingTelnetClientCache;
import com.google.gson.JsonElement;
public class AllAvailableScriptRunner implements AutoCloseable, SimpleScriptRunner, ScriptRegister {
private final SingleExecutorScriptRunner singleExecutorScriptRunner;
private final Queue queue;
private final HttpClient http;
private final WaitingTelnetClientCache telnet;
private final SnmpClientCache snmp;
private final PingClientCache ping;
private final RegisteredFunctionsScriptRunner runner;
public AllAvailableScriptRunner() throws IOException {
queue = new Queue();
singleExecutorScriptRunner = new SingleExecutorScriptRunner();
http = new HttpClient(queue, null);
telnet = new WaitingTelnetClientCache(queue);
snmp = new SnmpClientCache(queue);
ping = new PingClientCache(queue);
runner = new PingAvailable(ping).register(
new SnmpAvailable(snmp).register(
new WaitingTelnetAvailable(telnet).register(
new HttpAvailable(http).register(
new RegisteredFunctionsScriptRunner(new QueueScriptRunner<JsonElement>(queue, new JsonScriptRunner(singleExecutorScriptRunner)))))));
}
@Override
public ScriptRegister register(String functionId, ScriptFunction<JsonElement> function) {
runner.register(functionId, function);
return this;
}
@Override
public void eval(String script) {
runner.eval(script);
}
@Override
public void close() {
queue.close();
singleExecutorScriptRunner.close();
http.close();
telnet.close();
}
}