diff options
author | vlad <vlad@drivergrp.com> | 2016-07-17 20:46:10 -0400 |
---|---|---|
committer | vlad <vlad@drivergrp.com> | 2016-07-17 20:46:10 -0400 |
commit | 9cb5df86335b01e770eb656aa5eda3692410276e (patch) | |
tree | 9e92787feed60585400da13110fb9a3bf26e0d96 /src/main/scala/com/drivergrp/core/app.scala | |
parent | c5f1be05d99059421fdd203f21fd80378ba80b41 (diff) | |
download | driver-core-9cb5df86335b01e770eb656aa5eda3692410276e.tar.gz driver-core-9cb5df86335b01e770eb656aa5eda3692410276e.tar.bz2 driver-core-9cb5df86335b01e770eb656aa5eda3692410276e.zip |
App interruption and formats for Time
Diffstat (limited to 'src/main/scala/com/drivergrp/core/app.scala')
-rw-r--r-- | src/main/scala/com/drivergrp/core/app.scala | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/main/scala/com/drivergrp/core/app.scala b/src/main/scala/com/drivergrp/core/app.scala index 97e09b5..53239e0 100644 --- a/src/main/scala/com/drivergrp/core/app.scala +++ b/src/main/scala/com/drivergrp/core/app.scala @@ -12,6 +12,9 @@ import com.drivergrp.core.rest.Swagger import com.typesafe.config.Config import org.slf4j.LoggerFactory +import scala.concurrent.Await +import scala.concurrent.duration._ + object app { @@ -21,22 +24,33 @@ object app { config: Config = com.drivergrp.core.config.loadDefaultConfig, interface: String = "localhost", port: Int = 8080) { + implicit private lazy val actorSystem = ActorSystem("spray-routing", config) + implicit private lazy val executionContext = actorSystem.dispatcher + implicit private lazy val materializer = ActorMaterializer()(actorSystem) + private lazy val http = Http()(actorSystem) + + def run() = { activateServices(modules) scheduleServicesDeactivation(modules) bindHttp(modules) + Console.print(s"${this.getClass.getName} App is started") + } + + def stop() = { + http.shutdownAllConnectionPools().onComplete { _ => + actorSystem.terminate() + Await.result(actorSystem.whenTerminated, 30.seconds) + Console.print(s"${this.getClass.getName} App is stopped") + } } - protected def bindHttp(modules: Seq[Module]) { - implicit val actorSystem = ActorSystem("spray-routing", config) - implicit val executionContext = actorSystem.dispatcher - implicit val materializer = ActorMaterializer()(actorSystem) + protected def bindHttp(modules: Seq[Module]) { val serviceTypes = modules.flatMap(_.routeTypes) val swaggerService = new Swagger(actorSystem, serviceTypes, config) val swaggerRoutes = swaggerService.routes ~ swaggerService.swaggerUI - - Http()(actorSystem).bindAndHandle( + http.bindAndHandle( route2HandlerFlow(logRequestResult("log")(modules.map(_.route).foldLeft(swaggerRoutes) { _ ~ _ })), interface, port)(materializer) } |