From 5fe20906d99bc8e04c54a082535d7a7283e1764c Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Fri, 21 Mar 2025 07:59:31 -0400 Subject: [PATCH] [F] Fix artemis response reading --- .../samnyan/aqua/sega/aimedb/AimeDbClient.kt | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbClient.kt b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbClient.kt index 2c9eaa31..28c55704 100644 --- a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbClient.kt +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbClient.kt @@ -5,6 +5,7 @@ import io.netty.buffer.ByteBuf import io.netty.buffer.ByteBufUtil import io.netty.buffer.Unpooled import java.net.Socket +import java.net.SocketTimeoutException class AimeDbClient(val gameId: String, val keychipShort: String, val server: String) { // https://sega.bsnk.me/allnet/aimedb/common/#packet-header @@ -59,11 +60,18 @@ class AimeDbClient(val gameId: String, val keychipShort: String, val server: Str writeIntLE(0) // 0C 4b: Serial number } - fun send(buf: ByteBuf): ByteBuf = - Unpooled.wrappedBuffer(Socket(server, 22345).use { - it.getOutputStream().write(buf.array()) - it.getInputStream().readBytes() - }).let { AimeDbEncryption.decrypt(it) } + fun send(buf: ByteBuf): ByteBuf = Socket(server, 22345).use { + it.soTimeout = 3000 + it.getOutputStream().write(buf.array()) + it.getInputStream().use { r -> + Unpooled.buffer().apply { + val buffer = ByteArray(1024) + try { + while (r.read(buffer) != -1) writeBytes(buffer) + } catch (_: SocketTimeoutException) { } + } + } + }.let { AimeDbEncryption.decrypt(it) } fun execLookup(card: String) = send(when (card.length) {