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
74 lines
2.1 KiB
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()
|
|
}
|
|
}
|