/backend/src/main/scala/desafio/futbol/Main.scala

https://gitlab.com/rhernando/df_last · Scala · 66 lines · 51 code · 15 blank · 0 comment · 0 complexity · dfac2df1d9061c12012e41734bab7613 MD5 · raw file

  1. package desafio.futbol
  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 desafio.futbol.user.Session
  8. import com.softwaremill.session.{SessionConfig, SessionManager}
  9. import com.typesafe.scalalogging.StrictLogging
  10. import scala.concurrent.Future
  11. import scala.util.{Failure, Success}
  12. class Main() extends StrictLogging {
  13. def start(): (Future[ServerBinding], BusinessLogic) = {
  14. Locale.setDefault(Locale.US) // set default locale to prevent from sending cookie expiration date in polish format
  15. implicit val _system = ActorSystem("main")
  16. implicit val _materializer = ActorMaterializer()
  17. import _system.dispatcher
  18. val modules = new BusinessLogic with Routes {
  19. lazy val sessionConfig = SessionConfig.fromConfig(config.rootConfig).copy(sessionEncryptData = true)
  20. implicit lazy val ec = _system.dispatchers.lookup("akka-http-routes-dispatcher")
  21. implicit lazy val sessionManager: SessionManager[Session] = new SessionManager[Session](sessionConfig)
  22. implicit lazy val materializer = _materializer
  23. lazy val system = _system
  24. }
  25. logger.info("Server secret: " + modules.sessionConfig.serverSecret.take(3) + "...")
  26. modules.sqlDatabase.updateSchema()
  27. (Http().bindAndHandle(modules.routes, modules.config.serverHost, modules.config.serverPort), modules)
  28. }
  29. }
  30. object Main extends App with StrictLogging {
  31. val (startFuture, bl) = new Main().start()
  32. val host = bl.config.serverHost
  33. val port = bl.config.serverPort
  34. val system = bl.system
  35. import system.dispatcher
  36. startFuture.onComplete {
  37. case Success(b) =>
  38. logger.info(s"Server started on $host:$port")
  39. sys.addShutdownHook {
  40. b.unbind()
  41. bl.system.terminate()
  42. logger.info("Server stopped")
  43. }
  44. case Failure(e) =>
  45. logger.error(s"Cannot start server on $host:$port", e)
  46. sys.addShutdownHook {
  47. bl.system.terminate()
  48. logger.info("Server stopped")
  49. }
  50. }
  51. }