aboutsummaryrefslogtreecommitdiff
path: root/central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java
diff options
context:
space:
mode:
Diffstat (limited to 'central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java')
-rw-r--r--central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java b/central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java
new file mode 100644
index 0000000..032dc2f
--- /dev/null
+++ b/central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java
@@ -0,0 +1,56 @@
+package moe.yuuta.dn42peering.asn;
+
+import io.vertx.core.AbstractVerticle;
+import io.vertx.core.CompositeFuture;
+import io.vertx.core.Future;
+import io.vertx.core.Promise;
+import io.vertx.core.eventbus.MessageConsumer;
+import io.vertx.core.impl.logging.Logger;
+import io.vertx.core.impl.logging.LoggerFactory;
+import io.vertx.core.json.JsonObject;
+import io.vertx.mysqlclient.MySQLConnectOptions;
+import io.vertx.mysqlclient.MySQLPool;
+import io.vertx.serviceproxy.ServiceBinder;
+import io.vertx.sqlclient.PoolOptions;
+
+public class ASNVerticle extends AbstractVerticle {
+ private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName());
+
+ private MessageConsumer<JsonObject> consumer;
+ private MySQLPool pool;
+
+ @Override
+ public void start(Promise<Void> startPromise) throws Exception {
+ final JsonObject json = vertx.getOrCreateContext().config().getJsonObject("database");
+ final MySQLConnectOptions opt = new MySQLConnectOptions(json);
+ pool = MySQLPool.pool(vertx, opt, new PoolOptions().setMaxSize(5));
+
+ consumer = new ServiceBinder(vertx)
+ .setAddress(IASNService.ADDRESS)
+ .register(IASNService.class, new ASNServiceImpl(vertx, pool));
+ consumer.completionHandler(ar -> {
+ if(ar.succeeded()) {
+ startPromise.complete();
+ } else {
+ startPromise.fail(ar.cause());
+ }
+ });
+ }
+
+ @Override
+ public void stop(Promise<Void> stopPromise) throws Exception {
+ CompositeFuture.all(
+ Future.future(f -> consumer.unregister(ar -> {
+ if(ar.succeeded()) f.complete();
+ else f.fail(ar.cause());
+ })),
+ Future.future(f -> pool.close(ar -> {
+ if(ar.succeeded()) f.complete();
+ else f.fail(ar.cause());
+ }))
+ ).onComplete(ar -> {
+ if(ar.succeeded()) stopPromise.complete();
+ else stopPromise.fail(ar.cause());
+ });
+ }
+}