Open-source multiplayer game server compatible with the RuneScape client https://www.openrs2.org/
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.
 
 
 
 
openrs2/game/src/main/kotlin/org/openrs2/game/GameServer.kt

46 lines
1.3 KiB

package org.openrs2.game
import com.github.michaelbull.logging.InlineLogger
import com.google.common.util.concurrent.Service
import com.google.common.util.concurrent.ServiceManager
import jakarta.inject.Inject
import jakarta.inject.Singleton
@Singleton
public class GameServer @Inject constructor(
services: Set<Service>
) {
private val serviceManager = ServiceManager(services)
public fun run(start: Long) {
val shutdownHook = Thread(::stop, "ShutdownHook")
serviceManager.startAsync()
runtime.addShutdownHook(shutdownHook)
try {
serviceManager.awaitHealthy()
} catch (ex: Throwable) {
serviceManager.stopAsync().awaitStopped()
runtime.removeShutdownHook(shutdownHook)
throw ex
}
val elapsed = System.nanoTime() - start
logger.info { "Started OpenRS2 in ${elapsed / NANOS_PER_MILLI} milliseconds" }
serviceManager.awaitStopped()
runtime.removeShutdownHook(shutdownHook)
}
private fun stop() {
logger.info { "Stopping OpenRS2..." }
serviceManager.stopAsync().awaitStopped()
logger.info { "Stopped OpenRS2" }
}
private companion object {
private val logger = InlineLogger()
private val runtime = Runtime.getRuntime()
private const val NANOS_PER_MILLI = 1_000_000
}
}