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.

49 lines
1.3 KiB

  1. package nova.monadic_sfx.actors
  2. import io.odin.Logger
  3. import monix.eval.Task
  4. import cats.effect.Resource
  5. import akka.actor._
  6. import akka.actor.typed.scaladsl.adapter._
  7. import akka.actor.typed.scaladsl.Behaviors
  8. import com.softwaremill.macwire._
  9. import akka.actor.typed.Behavior
  10. import akka.actor.typed.DispatcherSelector
  11. trait ActorModule {
  12. def actorResource(logger: Logger[Task]): Resource[Task, ActorSystem] =
  13. Resource.make(logger.info("Creating Actor System") >> Task {
  14. ActorSystem(
  15. name = "FXActorSystem"
  16. )
  17. })(sys =>
  18. logger.info("Shutting down actor system") >> Task.fromFuture(
  19. sys.terminate()
  20. ) >> logger.info("Actor System terminated")
  21. )
  22. def testActor(
  23. system: ActorSystem
  24. ): akka.actor.typed.ActorRef[Counter.Command] = {
  25. val behaviour: Behavior[Counter.Command] =
  26. Behaviors.setup(context => wire[Counter])
  27. system.spawn(
  28. behaviour,
  29. "CounterActor",
  30. DispatcherSelector.fromConfig("javafx-dispatcher")
  31. )
  32. }
  33. def testActorL(
  34. system: ActorSystem
  35. ): Task[akka.actor.typed.ActorRef[Counter.Command]] =
  36. Task {
  37. val behaviour: Behavior[Counter.Command] =
  38. Behaviors.setup(context => wire[Counter])
  39. system.spawn(
  40. behaviour,
  41. "CounterActor",
  42. DispatcherSelector.fromConfig("javafx-dispatcher")
  43. )
  44. }
  45. }