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.
62 lines
1.9 KiB
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
|
|
}
|
|
}
|
|
|