diff --git a/gradle.properties b/gradle.properties index 48b434e..373892b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ kotlin.code.style=official ksp.incremental=false # The version of this software. This is compiled into the constants -serverVersion=1.0.5 +serverVersion=1.0.6 # This is the name of the jar file that will be produced when app:shadowJar is # run. Note: If you are planning on using this in a docker image you will need diff --git a/src/main/kotlin/com/jacobtread/relay/blaze/Components.kt b/src/main/kotlin/com/jacobtread/relay/blaze/Components.kt index a1349c2..3789866 100644 --- a/src/main/kotlin/com/jacobtread/relay/blaze/Components.kt +++ b/src/main/kotlin/com/jacobtread/relay/blaze/Components.kt @@ -1,29 +1,14 @@ package com.jacobtread.relay.blaze -@Suppress("unused") object Components { const val AUTHENTICATION = 0x1 - const val EXAMPLE = 0x3 const val GAME_MANAGER = 0x4 const val REDIRECTOR = 0x5 - const val PLAY_GROUPS = 0x6 const val STATS = 0x7 const val UTIL = 0x9 - const val CENSUS_DATA = 0xA - const val CLUBS = 0xB - const val GAME_REPORT_LEGACY = 0xC - const val LEAGUE = 0xD - const val MAIL = 0xE const val MESSAGING = 0xF - const val LOCKER = 0x14 - const val ROOMS = 0x15 - const val TOURNAMENTS = 0x17 - const val COMMERCE_INFO = 0x18 const val ASSOCIATION_LISTS = 0x19 - const val GPS_CONTENT_CONTROLLER = 0x1B const val GAME_REPORTING = 0x1C const val DYNAMIC_FILTER = 0x7D0 - const val RSP = 0x801 const val USER_SESSIONS = 0x7802 - } diff --git a/src/main/kotlin/com/jacobtread/relay/data/Constants.kt b/src/main/kotlin/com/jacobtread/relay/data/Constants.kt index 1666bf3..a263912 100644 --- a/src/main/kotlin/com/jacobtread/relay/data/Constants.kt +++ b/src/main/kotlin/com/jacobtread/relay/data/Constants.kt @@ -8,7 +8,7 @@ package com.jacobtread.relay.data * @constructor Create empty Constants */ object Constants { - const val RELAY_VERSION = "1.0.5" + const val RELAY_VERSION = "1.0.6" const val MYSQL_VERSION = "8.0.30" const val SQLITE_VERSION = "3.36.0.3" } diff --git a/src/main/kotlin/com/jacobtread/relay/database/models/Player.kt b/src/main/kotlin/com/jacobtread/relay/database/models/Player.kt index 28faf55..d741ede 100644 --- a/src/main/kotlin/com/jacobtread/relay/database/models/Player.kt +++ b/src/main/kotlin/com/jacobtread/relay/database/models/Player.kt @@ -118,38 +118,43 @@ data class Player( } } + class SettingsMapLoader(private val player: Player) { + private val out = LinkedHashMap<String, String>() + + fun load(): Future<Map<String, String>> { + val classesFuture = PlayerClassesTable.getByPlayer(player) + .thenApply { classes -> classes.forEach { out[it.getKey()] = it.toEncoded() } } + val charactersFuture = PlayerCharactersTable.getByPlayer(player) + .thenApply { characters -> characters.forEach { out[it.getKey()] = it.toEncoded() } } + val settingsBase = StringBuilder("20;4;") + .append(player.credits).append(";-1;0;") + .append(player.creditsSpent).append(";0;") + .append(player.gamesPlayed).append(';') + .append(player.secondsPlayed).append(";0;") + .append(player.inventory) + .toString() + return Future.allOf(classesFuture, charactersFuture) + .thenApply { + player.faceCodes?.apply { out["FaceCodes"] = this } + player.newItem?.apply { out["NewItem"] = this } + out["csreward"] = player.csReward.toString() + + player.completion?.apply { out["Completion"] = this } + player.progress?.apply { out["Progress"] = this } + player.cscompletion?.apply { out["cscompletion"] = this } + player.cstimestamps1?.apply { out["cstimestamps"] = this } + player.cstimestamps2?.apply { out["cstimestamps2"] = this } + player.cstimestamps3?.apply { out["cstimestamps3"] = this } + out["Base"] = settingsBase + out + } + } + + } + fun createSettingsMap(): Future<Map<String, String>> { - val out = LinkedHashMap<String, String>() - val classesFuture = PlayerClassesTable.getByPlayer(this) - .thenApply { classes -> - classes.forEach { out[it.getKey()] = it.toEncoded() } - } - val charactersFuture = PlayerCharactersTable.getByPlayer(this) - .thenApply { characters -> - characters.forEach { out[it.getKey()] = it.toEncoded() } - } - val settingsBase = StringBuilder("20;4;") - .append(credits).append(";-1;0;") - .append(creditsSpent).append(";0;") - .append(gamesPlayed).append(';') - .append(secondsPlayed).append(";0;") - .append(inventory) - .toString() - return Future.allOf(classesFuture, charactersFuture) - .thenApply { - faceCodes?.apply { out["FaceCodes"] = this } - newItem?.apply { out["NewItem"] = this } - out["csreward"] = csReward.toString() - - completion?.apply { out["Completion"] = this } - progress?.apply { out["Progress"] = this } - cscompletion?.apply { out["cscompletion"] = this } - cstimestamps1?.apply { out["cstimestamps"] = this } - cstimestamps2?.apply { out["cstimestamps2"] = this } - cstimestamps3?.apply { out["cstimestamps3"] = this } - out["Base"] = settingsBase - out - } + val loader = SettingsMapLoader(this) + return loader.load() } fun setPlayerDataBulk(map: Map<String, String>) { diff --git a/src/main/kotlin/com/jacobtread/relay/database/tables/PlayersTable.kt b/src/main/kotlin/com/jacobtread/relay/database/tables/PlayersTable.kt index d6a9c76..c7ba3e6 100644 --- a/src/main/kotlin/com/jacobtread/relay/database/tables/PlayersTable.kt +++ b/src/main/kotlin/com/jacobtread/relay/database/tables/PlayersTable.kt @@ -5,6 +5,7 @@ import com.jacobtread.relay.database.Database import com.jacobtread.relay.database.Table import com.jacobtread.relay.database.asList import com.jacobtread.relay.database.models.Player +import com.jacobtread.relay.utils.logging.Logger import org.intellij.lang.annotations.Language import java.sql.ResultSet import java.util.concurrent.CompletableFuture as Future @@ -301,12 +302,15 @@ object PlayersTable : Table { setString(4, "") // Inventory setBoolean(5, origin) } - .thenCompose { keys -> + .thenApply { + if (!it.next()) null + else it.getInt(1) + } + .thenCompose { id -> val future = Future<Player>() - if (!keys.next()) { + if (id == null) { future.completeExceptionally(null) } else { - val id = keys.getInt(1) future.complete(Player(id, email, displayName, hashedPassword)) } future @@ -329,14 +333,15 @@ object PlayersTable : Table { setString(1, details.email) setBoolean(2, true) } - .thenCompose { - val player = it.asPlayer() + .thenApply { it.asPlayer() } + .thenCompose { player -> if (player == null) { createOrigin(details) } else { Future.completedFuture(player) } } + } /** @@ -359,6 +364,7 @@ object PlayersTable : Table { ).thenApplyAsync { player -> val dataMap = details.dataMap if (dataMap.isNotEmpty()) { + Logger.logIfDebug { "Storing player origin details" } player.setPlayerDataBulk(dataMap) } player diff --git a/src/main/kotlin/com/jacobtread/relay/http/routes/QOSRoutes.kt b/src/main/kotlin/com/jacobtread/relay/http/routes/QOSRoutes.kt index 2d18449..0fc5ee7 100644 --- a/src/main/kotlin/com/jacobtread/relay/http/routes/QOSRoutes.kt +++ b/src/main/kotlin/com/jacobtread/relay/http/routes/QOSRoutes.kt @@ -9,7 +9,8 @@ fun RoutingGroup.routeQOS() { textNode("numprobes", 0) textNode("qosport", 17499) // This is a port textNode("probesize", 0) - textNode("qosip", 2733913518) // This is a encoded ip address + // 162.244.53.174 + textNode("qosip", 2733913518) textNode("requestid", 1) textNode("reqsecret", 0) } diff --git a/src/main/kotlin/com/jacobtread/relay/sessions/handlers/UtilHandlers.kt b/src/main/kotlin/com/jacobtread/relay/sessions/handlers/UtilHandlers.kt index d285651..78eae2d 100644 --- a/src/main/kotlin/com/jacobtread/relay/sessions/handlers/UtilHandlers.kt +++ b/src/main/kotlin/com/jacobtread/relay/sessions/handlers/UtilHandlers.kt @@ -202,21 +202,6 @@ fun Session.handlePostAuth(packet: Packet) { // telemetryAddress = "reports.tools.gos.ea.com:9988" // tickerAddress = "waleu2.tools.gos.ea.com:8999" - +group("TELE") { - text("ADRS", "127.0.0.1") // Server Address - number("ANON", 0) - text("DISA", "**") - text("FILT", "-UION/****") // Telemetry filter? - number("LOC", 1701725253) - text("NOOK", "US,CA,MX") - number("PORT", 9988) - number("SDLY", 15000) - text("SESS", "JMhnT9dXSED") - text("SKEY", "") - number("SPCT", 0x4B) - text("STIM", "") - } - +group("TICK") { text("ADRS", "127.0.0.1") number("port", 9988)