cy
09/20/2016, 12:39 PMprivate class CompositeVerticle(val children: List<Verticle>) : Verticle {
override fun start(startFuture: Future<Void>) {
action(startFuture, Verticle::start)
}
override fun stop(stopFuture: Future<Void>) {
action(stopFuture, Verticle::stop)
}
override fun init(vertx: Vertx, context: Context) {
children.forEach { it.init(vertx, context) }
}
override fun getVertx() = children.mapNotNull { it.vertx }.first()
private fun <R> action(future: Future<R>, action: (Verticle, Future<R>) -> Unit) {
children.map { verticle -> Future.future<R>().apply { action(verticle, this) } }
.reduce { a, b -> a.compose { b } }
.compose { future }
}
}