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.
|
|
package nova.monadic_sfx.actors
import io.odin.Logger import monix.eval.Task import cats.effect.Resource import akka.actor.typed.scaladsl.Behaviors import com.softwaremill.macwire._ import akka.util.Timeout import scala.concurrent.duration._ import scala.concurrent.Future import akka.actor.typed._ import akka.actor.typed.scaladsl.AskPattern._ import scala.concurrent.Await import nova.monadic_sfx.executors.Schedulers
trait ActorModule { import scala.concurrent.ExecutionContext
implicit val timeout: Timeout = Timeout(3.seconds)
def actorSystemResource( logger: Logger[Task] ): Resource[Task, ActorSystem[SpawnProtocol.Command]] = Resource.make(logger.info("Creating Actor System") >> Task { ActorSystem(HelloWorldMain(), name = "FXActorSystem") })(sys => logger.info("Shutting down actor system") >> Task( sys.terminate() ) >> logger.info("Actor System terminated") )
// def actorsResource(
// system: ActorSystem[SpawnProtocol.Command],
// logger: Logger[Task],
// schedulers: Schedulers
// ): Resource[Task, Task[ActorRef[Counter.Command]]] = {
// implicit val ec: ExecutionContext = system.executionContext
// implicit val scheduler = system.scheduler
// Resource.make(
// Task {
// val actor = Task.deferFuture {
// system.ask[ActorRef[Counter.Command]](
// SpawnProtocol.Spawn(
// behavior = Counter(),
// name = "counterActor",
// // DispatcherSelector.fromConfig("javafx-dispatcher"),
// // Props.empty,
// _
// )
// )
// }
// // system.
// actor
// }
// )(actorTask =>
// for {
// actor <- actorTask
// _ <- logger.info("Stopping actor counter")
// t <- Task(actor ! Counter.Stop)
// _ <- logger.info("Counter actor stopped")
// } yield ()
// )
// }
} object HelloWorldMain { def apply(): Behavior[SpawnProtocol.Command] = Behaviors.setup { context => // Start initial tasks
// context.spawn(...)
SpawnProtocol() } }
|