package wow.doge.mygame.actor import akka.actor.typed.ActorRef import akka.actor.typed.SpawnProtocol import akka.actor.typed.scaladsl.ActorContext import akka.actor.typed.scaladsl.Behaviors import wow.doge.mygame.implicits._ // import wow.doge.mygame.subsystems.events.EventsModule.GameEventBus // import wow.doge.mygame.subsystems.events.Event // import scala.reflect.ClassTag // import akka.actor.typed.LogOptions // import wow.doge.mygame.subsystems.events.EventBus // import scala.concurrent.duration._ // import akka.util.Timeout // import akka.actor.typed.SupervisorStrategy object GameActorSystem { sealed trait Command case class GetSpawnProtocol( replyTo: ActorRef[ActorRef[SpawnProtocol.Command]] ) extends Command class Props() { def create = Behaviors.setup[Command] { ctx => val systemSpawnProtocol = ctx.spawnN(SpawnProtocol()) new GameActorSystem(ctx, this, systemSpawnProtocol).receive } } } class GameActorSystem( ctx: ActorContext[GameActorSystem.Command], props: GameActorSystem.Props, sp: ActorRef[SpawnProtocol.Command] ) { import GameActorSystem._ def receive = Behaviors.receiveMessage[Command] { case GetSpawnProtocol(replyTo) => replyTo ! sp Behaviors.same } } // object EventBusSupervisor { // sealed trait Command // case class GetMainEventBus(replyTo: ActorRef[GameEventBus[Event]]) // extends Command // case class GetEventBus[T](replyTo: ActorRef[GameEventBus[T]])(implicit // classTag: ClassTag[T] // ) extends Command { // def ct = classTag // } // class Props(val spawnProtocol: ActorRef[SpawnProtocol.Command]) { // def create = // Behaviors.setup[Command] { ctx => // new EventBusSupervisor(ctx, this).receive // } // } // } // class EventBusSupervisor( // ctx: ActorContext[EventBusSupervisor.Command], // props: EventBusSupervisor.Props // ) { // import EventBusSupervisor._ // implicit val timeout = Timeout(1.second) // implicit val sp = props.spawnProtocol // def receive = // Behaviors.receiveMessage[Command] { // case g @ GetEventBus(replyTo) => // implicit val ct = g.ct // Behaviors // .supervise(EventBus()) // .onFailure[Exception]( // SupervisorStrategy.restart.withLimit(2, 100.millis) // ) // Behaviors.same // case _ => Behaviors.same // } // }