Use applet viewer config to find the hostname of a JS5 server

Signed-off-by: Graham <gpe@openrs2.org>
bzip2
Graham 3 years ago
parent 11a43242b9
commit 21ed41c307
  1. 20
      archive/src/main/kotlin/org/openrs2/archive/cache/CacheDownloader.kt
  2. 3
      archive/src/main/kotlin/org/openrs2/archive/game/Game.kt
  3. 15
      archive/src/main/kotlin/org/openrs2/archive/game/GameDatabase.kt
  4. 8
      archive/src/main/resources/org/openrs2/archive/migrations/V2__game_url.sql

@ -1,14 +1,18 @@
package org.openrs2.archive.cache package org.openrs2.archive.cache
import org.openrs2.archive.game.GameDatabase import org.openrs2.archive.game.GameDatabase
import org.openrs2.archive.jav.JavConfig
import org.openrs2.net.BootstrapFactory import org.openrs2.net.BootstrapFactory
import org.openrs2.net.awaitSuspend import org.openrs2.net.awaitSuspend
import java.net.URI
import java.net.http.HttpClient
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
import kotlin.coroutines.suspendCoroutine import kotlin.coroutines.suspendCoroutine
@Singleton @Singleton
public class CacheDownloader @Inject constructor( public class CacheDownloader @Inject constructor(
private val client: HttpClient,
private val bootstrapFactory: BootstrapFactory, private val bootstrapFactory: BootstrapFactory,
private val gameDatabase: GameDatabase, private val gameDatabase: GameDatabase,
private val importer: CacheImporter private val importer: CacheImporter
@ -16,10 +20,13 @@ public class CacheDownloader @Inject constructor(
public suspend fun download(gameName: String) { public suspend fun download(gameName: String) {
val game = gameDatabase.getGame(gameName) ?: throw Exception("Game not found") val game = gameDatabase.getGame(gameName) ?: throw Exception("Game not found")
val hostname = game.hostname ?: throw Exception("Hostname not set") val url = game.url ?: throw Exception("URL not set")
val port = game.port ?: throw Exception("Port not set")
val build = game.build ?: throw Exception("Current build not set") val build = game.build ?: throw Exception("Current build not set")
val config = JavConfig.download(client, url)
val codebase = config.config[CODEBASE] ?: throw Exception("Codebase missing")
val hostname = URI(codebase).host ?: throw Exception("Hostname missing")
val group = bootstrapFactory.createEventLoopGroup() val group = bootstrapFactory.createEventLoopGroup()
try { try {
suspendCoroutine<Unit> { continuation -> suspendCoroutine<Unit> { continuation ->
@ -28,7 +35,7 @@ public class CacheDownloader @Inject constructor(
bootstrap, bootstrap,
game.id, game.id,
hostname, hostname,
port, PORT,
build, build,
game.lastMasterIndexId, game.lastMasterIndexId,
continuation, continuation,
@ -36,10 +43,15 @@ public class CacheDownloader @Inject constructor(
) )
bootstrap.handler(Js5ChannelInitializer(handler)) bootstrap.handler(Js5ChannelInitializer(handler))
.connect(hostname, port) .connect(hostname, PORT)
} }
} finally { } finally {
group.shutdownGracefully().awaitSuspend() group.shutdownGracefully().awaitSuspend()
} }
} }
private companion object {
private const val CODEBASE = "codebase"
private const val PORT = 443
}
} }

@ -2,8 +2,7 @@ package org.openrs2.archive.game
public data class Game( public data class Game(
public val id: Int, public val id: Int,
public val hostname: String?, public val url: String?,
public val port: Int?,
public val build: Int?, public val build: Int?,
public val lastMasterIndexId: Int? public val lastMasterIndexId: Int?
) )

@ -12,7 +12,7 @@ public class GameDatabase @Inject constructor(
return database.execute { connection -> return database.execute { connection ->
connection.prepareStatement( connection.prepareStatement(
""" """
SELECT id, hostname, port, build, last_master_index_id SELECT id, url, build, last_master_index_id
FROM games FROM games
WHERE name = ? WHERE name = ?
""".trimIndent() """.trimIndent()
@ -25,24 +25,19 @@ public class GameDatabase @Inject constructor(
} }
val id = rows.getInt(1) val id = rows.getInt(1)
val hostname: String? = rows.getString(2) val url: String? = rows.getString(2)
var port: Int? = rows.getInt(3) var build: Int? = rows.getInt(3)
if (rows.wasNull()) {
port = null
}
var build: Int? = rows.getInt(4)
if (rows.wasNull()) { if (rows.wasNull()) {
build = null build = null
} }
var lastMasterIndexId: Int? = rows.getInt(5) var lastMasterIndexId: Int? = rows.getInt(4)
if (rows.wasNull()) { if (rows.wasNull()) {
lastMasterIndexId = null lastMasterIndexId = null
} }
return@execute Game(id, hostname, port, build, lastMasterIndexId) return@execute Game(id, url, build, lastMasterIndexId)
} }
} }
} }

@ -0,0 +1,8 @@
ALTER TABLE games
DROP COLUMN hostname,
DROP COLUMN port,
ADD COLUMN url TEXT NULL;
UPDATE games
SET url = 'https://oldschool.runescape.com/jav_config.ws'
WHERE name = 'oldschool';
Loading…
Cancel
Save