package io.vertx.example.util; import io.vertx.core.DeploymentOptions; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; import java.io.File; import java.io.IOException; import java.util.function.Consumer; /* * @author <a href="http://tfox.org">Tim Fox</a> */ public class Runner { private static final String CORE_EXAMPLES_DIR = "core-examples"; private static final String CORE_EXAMPLES_JAVA_DIR = CORE_EXAMPLES_DIR + "/src/main/java/"; private static final String CORE_EXAMPLES_JS_DIR = CORE_EXAMPLES_DIR + "/src/main/js/"; private static final String CORE_EXAMPLES_GROOVY_DIR = CORE_EXAMPLES_DIR + "/src/main/groovy/"; private static final String CORE_EXAMPLES_RUBY_DIR = CORE_EXAMPLES_DIR + "/src/main/ruby/"; public static void runClusteredExample(Class clazz) { runExample(CORE_EXAMPLES_JAVA_DIR, clazz, new VertxOptions().setClustered(true), null); } public static void runClusteredExample(Class clazz, VertxOptions options) { runExample(CORE_EXAMPLES_JAVA_DIR, clazz, options.setClustered(true), null); } public static void runExample(Class clazz) { runExample(CORE_EXAMPLES_JAVA_DIR, clazz, new VertxOptions().setClustered(false), null); } public static void runExample(Class clazz, DeploymentOptions options) { runExample(CORE_EXAMPLES_JAVA_DIR, clazz, new VertxOptions().setClustered(false), options); } // JavaScript examples public static void runJSExample(String scriptName) { runScriptExample(CORE_EXAMPLES_JS_DIR, scriptName, new VertxOptions().setClustered(false)); } public static void runJSExampleClustered(String scriptName) { runScriptExample(CORE_EXAMPLES_JS_DIR, scriptName, new VertxOptions().setClustered(true)); } static class JSEchoServerRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/net/echo/server.js"); } } static class JSEchoClientRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/net/echo/client.js"); } } static class JSEchoSslServerRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/net/echossl/server.js"); } } static class JSEchoSslClientRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/net/echossl/client.js"); } } static class JSEventBusPointToPointReceiverRunner { public static void main(String[] args) { Runner.runJSExampleClustered("io/vertx/example/core/eventbus/pointtopoint/receiver.js"); } } static class JSEventBusPointToPointSenderRunner { public static void main(String[] args) { Runner.runJSExampleClustered("io/vertx/example/core/eventbus/pointtopoint/sender.js"); } } static class JSEventBusPubSubReceiverRunner { public static void main(String[] args) { Runner.runJSExampleClustered("io/vertx/example/core/eventbus/pubsub/receiver.js"); } } static class JSEventBusPubSubSenderRunner { public static void main(String[] args) { Runner.runJSExampleClustered("io/vertx/example/core/eventbus/pubsub/sender.js"); } } static class JSHttpsServerRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/https/server.js"); } } static class JSHttpsClientRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/https/client.js"); } } static class JSHttpProxyServerRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/proxy/server.js"); } } static class JSHttpProxyProxyRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/proxy/proxy.js"); } } static class JSHttpProxyClientRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/proxy/client.js"); } } static class JSHttpSendFileRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/sendfile/send_file.js"); } } static class JSHttpSimpleServerRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/simple/server.js"); } } static class JSHttpSimpleClientRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/simple/client.js"); } } static class JSHttpSimpleFormRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/simpleform/simple_form_server.js"); } } static class JSHttpSimpleFormUploadRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/simpleformupload/simple_form_upload_server.js"); } } static class JSHttpUploadServerRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/upload/server.js"); } } static class JSHttpUploadClientRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/upload/client.js"); } } static class JSHttpWebsocketsServerRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/websockets/server.js"); } } static class JSHttpWebsocketsClientRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/http/websockets/client.js"); } } static class JSVerticleAsyncStartRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/verticle/asyncstart/deploy_example.js"); } } static class JSVerticleDeployRunner { public static void main(String[] args) { Runner.runJSExample("io/vertx/example/core/verticle/deploy/deploy_example.js"); } } // Groovy examples public static void runGroovyExample(String scriptName) { runScriptExample(CORE_EXAMPLES_GROOVY_DIR, scriptName, new VertxOptions().setClustered(false)); } public static void runGroovyExampleClustered(String scriptName) { runScriptExample(CORE_EXAMPLES_GROOVY_DIR, scriptName, new VertxOptions().setClustered(true)); } static class GroovyEchoServerRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/net/echo/server.groovy"); } } static class GroovyEchoClientRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/net/echo/client.groovy"); } } static class GroovyEchoSslServerRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/net/echossl/server.groovy"); } } static class GroovyEchoSslClientRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/net/echossl/client.groovy"); } } static class GroovyEventBusPointToPointReceiverRunner { public static void main(String[] args) { Runner.runGroovyExampleClustered("io/vertx/example/core/eventbus/pointtopoint/receiver.groovy"); } } static class GroovyEventBusPointToPointSenderRunner { public static void main(String[] args) { Runner.runGroovyExampleClustered("io/vertx/example/core/eventbus/pointtopoint/sender.groovy"); } } static class GroovyEventBusPubSubReceiverRunner { public static void main(String[] args) { Runner.runGroovyExampleClustered("io/vertx/example/core/eventbus/pubsub/receiver.groovy"); } } static class GroovyEventBusPubSubSenderRunner { public static void main(String[] args) { Runner.runGroovyExampleClustered("io/vertx/example/core/eventbus/pubsub/sender.groovy"); } } static class GroovyHttpsServerRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/https/server.groovy"); } } static class GroovyHttpsClientRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/https/client.groovy"); } } static class GroovyHttpProxyServerRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/proxy/server.groovy"); } } static class GroovyHttpProxyProxyRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/proxy/proxy.groovy"); } } static class GroovyHttpProxyClientRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/proxy/client.groovy"); } } static class GroovyHttpSendFileRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/sendfile/send_file.groovy"); } } static class GroovyHttpSimpleServerRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/simple/server.groovy"); } } static class GroovyHttpSimpleClientRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/simple/client.groovy"); } } static class GroovyHttpSimpleFormRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/simpleform/simple_form_server.groovy"); } } static class GroovyHttpSimpleFormUploadRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/simpleformupload/simple_form_upload_server.groovy"); } } static class GroovyHttpUploadServerRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/upload/server.groovy"); } } static class GroovyHttpUploadClientRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/upload/client.groovy"); } } static class GroovyHttpWebsocketsServerRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/websockets/server.groovy"); } } static class GroovyHttpWebsocketsClientRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/http/websockets/client.groovy"); } } static class GroovyVerticleAsyncStartRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/verticle/asyncstart/deploy_example.groovy"); } } static class GroovyVerticleDeployRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/verticle/deploy/deploy_example.groovy"); } } // Ruby examples public static void runRubyExample(String scriptName) { runScriptExample(CORE_EXAMPLES_RUBY_DIR, scriptName, new VertxOptions().setClustered(false)); } public static void runRubyExampleClustered(String scriptName) { runScriptExample(CORE_EXAMPLES_GROOVY_DIR, scriptName, new VertxOptions().setClustered(true)); } static class RubyEchoServerRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/net/echo/server.rb"); } } static class RubyEchoClientRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/net/echo/client.rb"); } } static class RubyEchoSslServerRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/net/echossl/server.rb"); } } static class RubyEchoSslClientRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/net/echossl/client.rb"); } } static class RubyEventBusPointToPointReceiverRunner { public static void main(String[] args) { Runner.runRubyExampleClustered("io/vertx/example/core/eventbus/pointtopoint/receiver.rb"); } } static class RubyEventBusPointToPointSenderRunner { public static void main(String[] args) { Runner.runRubyExampleClustered("io/vertx/example/core/eventbus/pointtopoint/sender.rb"); } } static class RubyEventBusPubSubReceiverRunner { public static void main(String[] args) { Runner.runRubyExampleClustered("io/vertx/example/core/eventbus/pubsub/receiver.rb"); } } static class RubyEventBusPubSubSenderRunner { public static void main(String[] args) { Runner.runRubyExampleClustered("io/vertx/example/core/eventbus/pubsub/sender.rb"); } } static class RubyHttpsServerRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/https/server.rb"); } } static class RubyHttpsClientRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/https/client.rb"); } } static class RubyHttpProxyServerRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/proxy/server.rb"); } } static class RubyHttpProxyProxyRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/proxy/proxy.rb"); } } static class RubyHttpProxyClientRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/proxy/client.rb"); } } static class RubyHttpSendFileRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/sendfile/send_file.rb"); } } static class RubyHttpSimpleServerRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/simple/server.rb"); } } static class RubyHttpSimpleClientRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/simple/client.rb"); } } static class RubyHttpSimpleFormRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/simpleform/simple_form_server.rb"); } } static class RubyHttpSimpleFormUploadRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/simpleformupload/simple_form_upload_server.rb"); } } static class RubyHttpUploadServerRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/upload/server.rb"); } } static class RubyHttpUploadClientRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/upload/client.rb"); } } static class RubyHttpWebsocketsServerRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/websockets/server.rb"); } } static class RubyHttpWebsocketsClientRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/http/websockets/client.rb"); } } static class RubyVerticleAsyncStartRunner { public static void main(String[] args) { Runner.runRubyExample("io/vertx/example/core/verticle/asyncstart/deploy_example.rb"); } } static class RubyVerticleDeployRunner { public static void main(String[] args) { Runner.runGroovyExample("io/vertx/example/core/verticle/deploy/deploy_example.rb"); } } public static void runExample(String exampleDir, Class clazz, VertxOptions options, DeploymentOptions deploymentOptions) { runExample(exampleDir + clazz.getPackage().getName().replace(".", "/"), clazz.getName(), options, deploymentOptions); } public static void runScriptExample(String prefix, String scriptName, VertxOptions options) { File file = new File(scriptName); String dirPart = file.getParent(); String scriptDir = prefix + dirPart; runExample(scriptDir, scriptDir + "/" + file.getName(), options, null); } public static void runExample(String exampleDir, String verticleID, VertxOptions options, DeploymentOptions deploymentOptions) { if (options == null) { // Default parameter options = new VertxOptions(); } // Smart cwd detection // Based on the current directory (.) and the desired directory (exampleDir), we try to compute the vertx.cwd // directory: try { // We need to use the canonical file. Without the file name is . File current = new File(".").getCanonicalFile(); if (exampleDir.startsWith(current.getName()) && ! exampleDir.equals(current.getName())) { exampleDir = exampleDir.substring(current.getName().length() + 1); } } catch (IOException e) { // Ignore it. } System.setProperty("vertx.cwd", exampleDir); Consumer<Vertx> runner = vertx -> { try { if (deploymentOptions != null) { vertx.deployVerticle(verticleID, deploymentOptions); } else { vertx.deployVerticle(verticleID); } } catch (Throwable t) { t.printStackTrace(); } }; if (options.isClustered()) { Vertx.clusteredVertx(options, res -> { if (res.succeeded()) { Vertx vertx = res.result(); runner.accept(vertx); } else { res.cause().printStackTrace(); } }); } else { Vertx vertx = Vertx.vertx(options); runner.accept(vertx); } } }