Testing out JmonkeyEngine to make a game in Scala with Akka Actors within a pure FP layer
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.

67 lines
2.1 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
4 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
  1. package wow.doge.mygame
  2. import scala.concurrent.duration._
  3. import akka.util.Timeout
  4. import cats.effect.ExitCode
  5. import cats.effect.Resource
  6. import cats.implicits._
  7. import io.odin.consoleLogger
  8. import io.odin.fileLogger
  9. import io.odin.json.Formatter
  10. import io.odin.syntax._
  11. import monix.bio.BIOApp
  12. import monix.bio.Task
  13. import monix.bio.UIO
  14. import monix.execution.Scheduler
  15. import scalafx.scene.control.TextArea
  16. import wow.doge.mygame.ActorSystemResource
  17. import wow.doge.mygame.executors.ExecutorsModule
  18. import wow.doge.mygame.types.AkkaScheduler
  19. import wow.doge.mygame.utils.GenericConsoleStream
  20. import io.odin
  21. object Main extends BIOApp with ExecutorsModule {
  22. import java.util.logging.{Logger => JLogger, Level}
  23. JLogger.getLogger("").setLevel(Level.SEVERE)
  24. implicit val timeout = Timeout(1.second)
  25. override def scheduler: Scheduler = schedulers.async.value
  26. def appResource(consoleStream: GenericConsoleStream[TextArea]) =
  27. for {
  28. logger <-
  29. consoleLogger(minLevel = odin.Level.Debug).withAsync(
  30. timeWindow = 1.milliseconds,
  31. maxBufferSize = Some(100)
  32. ) |+|
  33. fileLogger(
  34. "application-log-1.log",
  35. Formatter.json
  36. ).withAsync(timeWindow = 1.milliseconds, maxBufferSize = Some(2000))
  37. jmeScheduler <- jmeSchedulerResource
  38. // backend <- Resource.make(toIO(HttpClientMonixBackend()))(backend =>
  39. // toIO(backend.close())
  40. // )
  41. actorSystem <- new ActorSystemResource(logger, schedulers.async).get
  42. _ <- Resource.liftF(
  43. new MainApp(
  44. logger,
  45. jmeScheduler,
  46. schedulers,
  47. consoleStream
  48. )(actorSystem, timeout, AkkaScheduler(actorSystem.scheduler)).program
  49. )
  50. } yield ()
  51. def run(args: List[String]): UIO[ExitCode] = {
  52. val consoleStream = GenericConsoleStream.textAreaStream()
  53. Console.withOut(consoleStream)(
  54. appResource(consoleStream)
  55. .use(_ => Task.unit)
  56. .flatMap(_ => Task(consoleStream.close()))
  57. .onErrorHandleWith(ex => UIO(ex.printStackTrace()))
  58. .as(ExitCode.Success)
  59. )
  60. }
  61. }