41 lines
958 B
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
|
|
}
|
|
}
|