/example/src/main/scala/com/softwaremill/example/Main.scala

https://github.com/softwaremill/slick-eventsourcing · Scala · 67 lines · 53 code · 14 blank · 0 comment · 0 complexity · 76d2da28ea1b9a0d23610bcf4ccffd61 MD5 · raw file

  1. package com.softwaremill.example
  2. import java.util.Locale
  3. import akka.actor.ActorSystem
  4. import akka.http.scaladsl.Http
  5. import akka.http.scaladsl.Http.ServerBinding
  6. import akka.stream.ActorMaterializer
  7. import com.softwaremill.example.api.{Session, Routes}
  8. import com.softwaremill.example.database.SchemaUpdate
  9. import com.softwaremill.session.{SessionManager, SessionConfig}
  10. import com.typesafe.scalalogging.StrictLogging
  11. import scala.concurrent.Future
  12. import scala.util.{Failure, Success}
  13. class Main() extends StrictLogging {
  14. def start(): (Future[ServerBinding], Beans) = {
  15. Locale.setDefault(Locale.US)
  16. implicit val _system = ActorSystem("slick-eventsourcing")
  17. implicit val _materializer = ActorMaterializer()
  18. import _system.dispatcher
  19. val modules = new Beans with Routes {
  20. lazy val sessionConfig = SessionConfig.fromConfig(config.rootConfig).copy(sessionEncryptData = true)
  21. implicit lazy val ec = _system.dispatcher
  22. implicit lazy val sessionManager: SessionManager[Session] = new SessionManager[Session](sessionConfig)
  23. implicit lazy val materializer = _materializer
  24. lazy val system = _system
  25. }
  26. modules.asyncEventRunner.start()
  27. SchemaUpdate.update(modules.config.dbH2Url)
  28. val startFuture = Http().bindAndHandle(modules.routes, modules.config.serverHost, modules.config.serverPort)
  29. (startFuture, modules)
  30. }
  31. }
  32. object Main extends App with StrictLogging {
  33. val (startFuture, modules) = new Main().start()
  34. val host = modules.config.serverHost
  35. val port = modules.config.serverPort
  36. val system = modules.system
  37. import system.dispatcher
  38. startFuture.onComplete {
  39. case Success(b) =>
  40. logger.info(s"Server started on $host:$port")
  41. sys.addShutdownHook {
  42. b.unbind()
  43. system.terminate()
  44. logger.info("Server stopped")
  45. }
  46. case Failure(e) =>
  47. logger.error(s"Cannot start server on $host:$port", e)
  48. sys.addShutdownHook {
  49. system.terminate()
  50. logger.info("Server stopped")
  51. }
  52. }
  53. }