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/net/NetworkService.kt

62 lines
1.9 KiB

package org.openrs2.game.net
import com.google.common.util.concurrent.AbstractService
import io.netty.channel.EventLoopGroup
import org.openrs2.game.net.http.HttpChannelInitializer
import org.openrs2.net.BootstrapFactory
import org.openrs2.net.asCompletableFuture
import java.util.concurrent.CompletableFuture
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
public class NetworkService @Inject constructor(
private val bootstrapFactory: BootstrapFactory,
private val httpInitializer: HttpChannelInitializer,
private val rs2Initializer: Rs2ChannelInitializer
) : AbstractService() {
private lateinit var group: EventLoopGroup
override fun doStart() {
group = bootstrapFactory.createEventLoopGroup()
val httpFuture = bootstrapFactory.createServerBootstrap(group)
.childHandler(httpInitializer)
.bind(HTTP_PORT)
.asCompletableFuture()
val rs2Initializer = bootstrapFactory.createServerBootstrap(group)
.childHandler(rs2Initializer)
val rs2PrimaryFuture = rs2Initializer.bind(RS2_PRIMARY_PORT)
.asCompletableFuture()
val rs2SecondaryFuture = rs2Initializer.bind(RS2_SECONDARY_PORT)
.asCompletableFuture()
CompletableFuture.allOf(httpFuture, rs2PrimaryFuture, rs2SecondaryFuture).handle { _, ex ->
if (ex != null) {
notifyFailed(ex)
} else {
notifyStarted()
}
}
}
override fun doStop() {
group.shutdownGracefully().addListener { future ->
if (future.isSuccess) {
notifyStopped()
} else {
notifyFailed(future.cause())
}
}
}
private companion object {
// TODO(gpe): make these configurable
private const val RS2_PRIMARY_PORT = 40001
private const val RS2_SECONDARY_PORT = 50001
private const val HTTP_PORT = 7001
}
}