aboutsummaryrefslogtreecommitdiff
path: root/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/RPCVerticle.java
blob: c24c29a304e3f592085bccbdc63e9d80853a99af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package moe.yuuta.dn42peering.agent.grpc;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;
import io.vertx.core.impl.logging.Logger;
import io.vertx.core.impl.logging.LoggerFactory;
import io.vertx.grpc.VertxServer;
import io.vertx.grpc.VertxServerBuilder;
import moe.yuuta.dn42peering.RPC;
import moe.yuuta.dn42peering.agent.Persistent;

public class RPCVerticle extends AbstractVerticle {
    private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName());

    private VertxServer server;

    @Override
    public void start(Promise<Void> startPromise) throws Exception {
        Persistent.recover(vertx)
                .onComplete(ar -> {
                    if(ar.succeeded()) {
                        server = VertxServerBuilder
                                .forAddress(vertx, vertx.getOrCreateContext().config().getString("internal_ip"),
                                        RPC.AGENT_PORT)
                                .addService(new AgentServiceImpl(vertx))
                                .build()
                                .start(startPromise);
                    } else {
                        logger.error("Cannot recover from persistent state, aborting.", ar.cause());
                        startPromise.fail("Recover failed.");
                    }
                });
    }

    @Override
    public void stop(Promise<Void> stopPromise) throws Exception {
        if(server != null)
            server.shutdown(stopPromise);
    }
}