55 lines
1.4 KiB
Scala
55 lines
1.4 KiB
Scala
package logic
|
|
|
|
import de.knockoutwhist.data.Pod
|
|
import de.knockoutwhist.data.redis.RedisManager
|
|
import org.apache.pekko.actor.ActorSystem
|
|
import org.redisson.config.Config
|
|
import play.api.Logger
|
|
import play.api.inject.ApplicationLifecycle
|
|
|
|
import java.util
|
|
import java.util.UUID
|
|
import javax.inject.*
|
|
import scala.concurrent.ExecutionContext
|
|
import scala.jdk.CollectionConverters.*
|
|
|
|
@Singleton
|
|
class Gateway @Inject()(
|
|
lifecycle: ApplicationLifecycle,
|
|
actorSystem: ActorSystem
|
|
)(implicit ec: ExecutionContext) {
|
|
|
|
private val logger = Logger(getClass.getName)
|
|
|
|
val redis: RedisManager = {
|
|
val config: Config = Config()
|
|
val url = "redis://" + sys.env.getOrElse("REDIS_HOST", "localhost") + ":" + sys.env.getOrElse("REDIS_PORT", "6379")
|
|
logger.info(s"Connecting to Redis at $url")
|
|
config.useSingleServer.setAddress(url)
|
|
RedisManager(config)
|
|
}
|
|
|
|
redis.continuousSyncPod(() => {
|
|
logger.info("Syncing pod with Redis")
|
|
createPod()
|
|
})
|
|
|
|
logger.info("Gateway started")
|
|
|
|
def syncPod(): Unit = {
|
|
redis.syncPod(createPod())
|
|
}
|
|
|
|
private def createPod(): Pod = {
|
|
Pod(
|
|
UUID.randomUUID().toString,
|
|
PodManager.podName,
|
|
PodManager.podIp,
|
|
9000,
|
|
new util.ArrayList[String](PodManager.getAllGameIds().asJava),
|
|
new util.ArrayList[String](PodManager.allBoundUsers().asJava)
|
|
)
|
|
}
|
|
|
|
}
|