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

Signed-off-by: Graham <gpe@openrs2.org>
pull/132/head
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
import org.openrs2.archive.game.GameDatabase
import org.openrs2.archive.jav.JavConfig
import org.openrs2.net.BootstrapFactory
import org.openrs2.net.awaitSuspend
import java.net.URI
import java.net.http.HttpClient
import javax.inject.Inject
import javax.inject.Singleton
import kotlin.coroutines.suspendCoroutine
@Singleton
public class CacheDownloader @Inject constructor(
private val client: HttpClient,
private val bootstrapFactory: BootstrapFactory,
private val gameDatabase: GameDatabase,
private val importer: CacheImporter
@ -16,10 +20,13 @@ public class CacheDownloader @Inject constructor(
public suspend fun download(gameName: String) {
val game = gameDatabase.getGame(gameName) ?: throw Exception("Game not found")
val hostname = game.hostname ?: throw Exception("Hostname not set")
val port = game.port ?: throw Exception("Port not set")
val url = game.url ?: throw Exception("URL 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()
try {
suspendCoroutine<Unit> { continuation ->
@ -28,7 +35,7 @@ public class CacheDownloader @Inject constructor(
bootstrap,
game.id,
hostname,
port,
PORT,
build,
game.lastMasterIndexId,
continuation,
@ -36,10 +43,15 @@ public class CacheDownloader @Inject constructor(
)
bootstrap.handler(Js5ChannelInitializer(handler))
.connect(hostname, port)
.connect(hostname, PORT)
}
} finally {
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 val id: Int,
public val hostname: String?,
public val port: Int?,
public val url: String?,
public val build: Int?,
public val lastMasterIndexId: Int?
)

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