package nova.monadic_sfx.actors import io.odin.Logger import monix.eval.Task import cats.effect.Resource import akka.actor._ import akka.actor.typed.scaladsl.adapter._ import akka.actor.typed.scaladsl.Behaviors import com.softwaremill.macwire._ import akka.actor.typed.Behavior import akka.actor.typed.DispatcherSelector trait ActorModule { def actorResource(logger: Logger[Task]): Resource[Task, ActorSystem] = Resource.make(logger.info("Creating Actor System") >> Task { ActorSystem( name = "FXActorSystem" ) })(sys => logger.info("Shutting down actor system") >> Task.fromFuture( sys.terminate() ) >> logger.info("Actor System terminated") ) def testActor( system: ActorSystem ): akka.actor.typed.ActorRef[Counter.Command] = { val behaviour: Behavior[Counter.Command] = Behaviors.setup(context => wire[Counter]) system.spawn( behaviour, "CounterActor", DispatcherSelector.fromConfig("javafx-dispatcher") ) } def testActorL( system: ActorSystem ): Task[akka.actor.typed.ActorRef[Counter.Command]] = Task { val behaviour: Behavior[Counter.Command] = Behaviors.setup(context => wire[Counter]) system.spawn( behaviour, "CounterActor", DispatcherSelector.fromConfig("javafx-dispatcher") ) } }