package com.github.aesteve.vertx.nubes;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Context;
import io.vertx.core.Future;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.json.JsonObject;
import io.vertx.core.logging.Logger;
import io.vertx.core.logging.LoggerFactory;
import static com.github.aesteve.vertx.nubes.utils.async.AsyncUtils.*;
public class NubesServer extends AbstractVerticle {
private static final Logger LOG = LoggerFactory.getLogger(NubesServer.class);
protected HttpServer server;
protected HttpServerOptions options;
protected VertxNubes nubes;
@Override
public void init(Vertx vertx, Context context) {
super.init(vertx, context);
JsonObject config = context.config();
options = new HttpServerOptions();
options.setHost(config.getString("host", "localhost"));
options.setPort(config.getInteger("port", 9000));
nubes = new VertxNubes(vertx, config);
}
@Override
public void start(Future<Void> future) {
server = vertx.createHttpServer(options);
nubes.bootstrap(onSuccessOnly(future, router -> {
server.requestHandler(router::accept);
server.listen(ignoreResult(future));
LOG.info("Server listening on port : " + options.getPort());
}));
}
@Override
public void stop(Future<Void> future) {
nubes.stop(nubesRes -> closeServer(future));
}
private void closeServer(Future<Void> future) {
if (server != null) {
LOG.info("Closing HTTP server");
server.close(completeOrFail(future));
} else {
future.complete();
}
}
}