lila/modules/socket/src/main/SocketMap.scala

41 lines
958 B
Scala

package lila.socket
import ornicar.scalalib.Random.approximatly
import scala.concurrent.duration._
import lila.hub.{ Trouper, TrouperMap }
object SocketMap {
def apply[T <: Trouper](
system: akka.actor.ActorSystem,
mkTrouper: String => T,
accessTimeout: FiniteDuration,
monitoringName: String,
broomFrequency: FiniteDuration
): TrouperMap[T] = {
val trouperMap = new TrouperMap[T](
mkTrouper = mkTrouper,
accessTimeout = accessTimeout
)
system.scheduler.schedule(30 seconds, 30 seconds) {
trouperMap.monitor(monitoringName)
}
system.scheduler.schedule(approximatly(0.05f)(12.seconds.toMillis).millis, broomFrequency) {
trouperMap tellAll actorApi.Broom
}
system.lilaBus.subscribeFuns(
'shutdown -> {
case _ => trouperMap.killAll
},
'announce -> {
case m: lila.hub.actorApi.Announce => trouperMap tellAll m
}
)
trouperMap
}
}