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.

74 lines
2.1 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.typed.scaladsl.Behaviors
  6. import com.softwaremill.macwire._
  7. import akka.util.Timeout
  8. import scala.concurrent.duration._
  9. import scala.concurrent.Future
  10. import akka.actor.typed._
  11. import akka.actor.typed.scaladsl.AskPattern._
  12. import scala.concurrent.Await
  13. import nova.monadic_sfx.executors.Schedulers
  14. trait ActorModule {
  15. import scala.concurrent.ExecutionContext
  16. implicit val timeout: Timeout = Timeout(3.seconds)
  17. def actorSystemResource(
  18. logger: Logger[Task]
  19. ): Resource[Task, ActorSystem[SpawnProtocol.Command]] =
  20. Resource.make(logger.info("Creating Actor System") >> Task {
  21. ActorSystem(HelloWorldMain(), name = "FXActorSystem")
  22. })(sys =>
  23. logger.info("Shutting down actor system") >> Task(
  24. sys.terminate()
  25. ) >> logger.info("Actor System terminated")
  26. )
  27. // def actorsResource(
  28. // system: ActorSystem[SpawnProtocol.Command],
  29. // logger: Logger[Task],
  30. // schedulers: Schedulers
  31. // ): Resource[Task, Task[ActorRef[Counter.Command]]] = {
  32. // implicit val ec: ExecutionContext = system.executionContext
  33. // implicit val scheduler = system.scheduler
  34. // Resource.make(
  35. // Task {
  36. // val actor = Task.deferFuture {
  37. // system.ask[ActorRef[Counter.Command]](
  38. // SpawnProtocol.Spawn(
  39. // behavior = Counter(),
  40. // name = "counterActor",
  41. // // DispatcherSelector.fromConfig("javafx-dispatcher"),
  42. // // Props.empty,
  43. // _
  44. // )
  45. // )
  46. // }
  47. // // system.
  48. // actor
  49. // }
  50. // )(actorTask =>
  51. // for {
  52. // actor <- actorTask
  53. // _ <- logger.info("Stopping actor counter")
  54. // t <- Task(actor ! Counter.Stop)
  55. // _ <- logger.info("Counter actor stopped")
  56. // } yield ()
  57. // )
  58. // }
  59. }
  60. object HelloWorldMain {
  61. def apply(): Behavior[SpawnProtocol.Command] =
  62. Behaviors.setup { context =>
  63. // Start initial tasks
  64. // context.spawn(...)
  65. SpawnProtocol()
  66. }
  67. }