You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

28 lines
692 B

  1. package nova.monadic_sfx.actors
  2. import scala.concurrent.duration._
  3. import akka.actor.typed._
  4. import akka.util.Timeout
  5. import cats.effect.Resource
  6. import io.odin.Logger
  7. import monix.bio.Task
  8. trait ActorModule {
  9. implicit def timeout: Timeout = Timeout(3.seconds)
  10. def actorSystemResource(
  11. logger: Logger[Task]
  12. ): Resource[Task, ActorSystem[SpawnProtocol.Command]] =
  13. Resource.make(logger.info("Creating Actor System") >> Task {
  14. ActorSystem(SpawnProtocol(), name = "FXActorSystem")
  15. })(sys =>
  16. for {
  17. _ <- Task(sys.terminate())
  18. _ <- Task.fromFuture(sys.whenTerminated)
  19. _ <- logger.info("Actor System Terminated")
  20. } yield ()
  21. )
  22. }