diff options
Diffstat (limited to 'mavigator-server/src/main/scala/mavigator/Main.scala')
-rw-r--r-- | mavigator-server/src/main/scala/mavigator/Main.scala | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/mavigator-server/src/main/scala/mavigator/Main.scala b/mavigator-server/src/main/scala/mavigator/Main.scala index 6ea894e..3ad1460 100644 --- a/mavigator-server/src/main/scala/mavigator/Main.scala +++ b/mavigator-server/src/main/scala/mavigator/Main.scala @@ -1,11 +1,12 @@ package mavigator +import scala.concurrent.{Await, TimeoutException} +import scala.concurrent.duration._ + import akka.actor._ import akka.http.scaladsl._ -import akka.http.scaladsl.server._ import akka.stream._ -import scala.concurrent.Await -import scala.concurrent.duration.Duration +import mavigator.uav.Uav object Main { @@ -15,30 +16,33 @@ object Main { def main(args: Array[String]): Unit = { import system.dispatcher - system.log.info("System started.") + val route = Router.route - val router = Router.route + system.log.info(s"Initializing UAV connection backend...") + Uav().init() - system.log.info(s"Starting server") - val binding = Http(system).bindAndHandle(router, "0.0.0.0", 8080) + system.log.info(s"Starting server...") + val binding = Http(system).bindAndHandle(route, "::", 8080) for (b <- binding) { val addr = b.localAddress.getHostString() val port = b.localAddress.getPort() system.log.info(s"Server is listening on $addr:$port") } - - scala.io.StdIn.readLine() - - binding.flatMap{b => - system.log.info("Shutting down server...") - b.unbind() - }.onComplete{ _ => - system.log.info("Server shut down") - system.terminate() - } - Await.result(system.whenTerminated, Duration.Inf) + sys.addShutdownHook { stop() } + } + def stop() = { + system.log.info("Stopping server...") + system.terminate() + + try { + Await.result(system.whenTerminated, 2.seconds) + System.err.println("Bye.") + } catch { + case ex: TimeoutException => + System.err.println("Shutdown is taking too long, exiting now") + } } } |