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.

45 lines
1.1 KiB

  1. package nova.monadic_sfx.concurrent
  2. import com.typesafe.scalalogging.Logger
  3. import monix.execution.Scheduler
  4. import monix.execution.UncaughtExceptionReporter
  5. import monix.execution.schedulers.TracingScheduler
  6. import cats.effect.Blocker
  7. final case class Schedulers(
  8. io: Schedulers.IoScheduler,
  9. async: Schedulers.AsyncScheduler,
  10. fx: Schedulers.FxScheduler
  11. )
  12. object Schedulers {
  13. val reporter = UncaughtExceptionReporter { ex =>
  14. val logger = Logger[Schedulers]
  15. logger.error("Uncaught exception", ex)
  16. }
  17. val default = Schedulers(
  18. IoScheduler(
  19. Scheduler
  20. .io()
  21. .withUncaughtExceptionReporter(Schedulers.reporter)
  22. ),
  23. AsyncScheduler(
  24. Scheduler
  25. .computation()
  26. .withUncaughtExceptionReporter(Schedulers.reporter)
  27. ),
  28. FxScheduler(
  29. TracingScheduler(
  30. JFXExecutionContexts.fxScheduler
  31. .withUncaughtExceptionReporter(Schedulers.reporter)
  32. )
  33. )
  34. )
  35. final case class AsyncScheduler(value: Scheduler)
  36. final case class IoScheduler(value: Scheduler) {
  37. val blocker = Blocker.liftExecutionContext(value)
  38. }
  39. final case class FxScheduler(value: Scheduler)
  40. }