From 8a04bb014ae0fbb3c782f598d54a699aca247177 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Mon, 13 Jan 2025 21:16:19 -0500 Subject: [PATCH] [M] Split code --- .../FutariServer.kt} | 58 ++----------------- .../sega/maimai2/worldslink/FutariTypes.kt | 56 ++++++++++++++++++ 2 files changed, 61 insertions(+), 53 deletions(-) rename src/main/java/icu/samnyan/aqua/sega/maimai2/{MaimaiFutari.kt => worldslink/FutariServer.kt} (79%) create mode 100644 src/main/java/icu/samnyan/aqua/sega/maimai2/worldslink/FutariTypes.kt diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/MaimaiFutari.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/worldslink/FutariServer.kt similarity index 79% rename from src/main/java/icu/samnyan/aqua/sega/maimai2/MaimaiFutari.kt rename to src/main/java/icu/samnyan/aqua/sega/maimai2/worldslink/FutariServer.kt index 1cadf125..f3dafadd 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/MaimaiFutari.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/worldslink/FutariServer.kt @@ -1,6 +1,8 @@ -package icu.samnyan.aqua.sega.maimai2 +package icu.samnyan.aqua.sega.maimai2.worldslink -import ext.* +import ext.logger +import ext.millis +import ext.thread import java.io.BufferedReader import java.io.BufferedWriter import java.io.InputStreamReader @@ -13,60 +15,10 @@ import java.util.concurrent.locks.ReentrantLock import kotlin.collections.set import kotlin.concurrent.withLock - const val PROTO_VERSION = 1 const val MAX_STREAMS = 10 const val SO_TIMEOUT = 10000 -private object Command { - // Control plane - const val CTL_START = 1u - const val CTL_BIND = 2u - const val CTL_HEARTBEAT = 3u - const val CTL_TCP_CONNECT = 4u // Accept a new multiplexed TCP stream - const val CTL_TCP_ACCEPT = 5u - const val CTL_TCP_ACCEPT_ACK = 6u - const val CTL_TCP_CLOSE = 7u - - // Data plane - const val DATA_SEND = 21u - const val DATA_BROADCAST = 22u -} - -private object Proto { - const val TCP = 6u - const val UDP = 17u -} - -data class Msg( - var cmd: UInt, - var proto: UInt? = null, - var sid: UInt? = null, - var src: UInt? = null, - var sPort: UInt? = null, - var dst: UInt? = null, - var dPort: UInt? = null, - var data: String? = null -) { - override fun toString() = ls( - 1, cmd, proto, sid, src, sPort, dst, dPort, - null, null, null, null, null, null, null, null, // reserved for future use - data - ).joinToString(",") { it?.str ?: "" }.trimEnd(',') - - companion object { - val fields = arr(Msg::proto, Msg::sid, Msg::src, Msg::sPort, Msg::dst, Msg::dPort) - - fun fromString(str: String): Msg { - val sp = str.split(',') - return Msg(0u).apply { - cmd = sp[1].toUInt() - fields.forEachIndexed { i, f -> f.set(this, sp.getOrNull(i + 2)?.some?.toUIntOrNull()) } - data = sp.drop(16).joinToString(",") - } - } - } -} fun ctlMsg(cmd: UInt, data: String? = null) = Msg(cmd, data = data) data class ActiveClient( @@ -133,7 +85,7 @@ fun ActiveClient.handle(msg: Msg) { val sid = msg.sid ?: return log.warn("Accept: Stream ID not found") if (sid !in target.pendingStreams) - return log.warn("Stream ID not found in pending list: ${sid}") + return log.warn("Stream ID not found in pending list: $sid") // Add the stream to the active list target.pendingStreams.remove(sid) diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/worldslink/FutariTypes.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/worldslink/FutariTypes.kt new file mode 100644 index 00000000..c011af57 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/worldslink/FutariTypes.kt @@ -0,0 +1,56 @@ +package icu.samnyan.aqua.sega.maimai2.worldslink + +import ext.arr +import ext.ls +import ext.some +import ext.str + +object Command { + // Control plane + const val CTL_START = 1u + const val CTL_BIND = 2u + const val CTL_HEARTBEAT = 3u + const val CTL_TCP_CONNECT = 4u // Accept a new multiplexed TCP stream + const val CTL_TCP_ACCEPT = 5u + const val CTL_TCP_ACCEPT_ACK = 6u + const val CTL_TCP_CLOSE = 7u + + // Data plane + const val DATA_SEND = 21u + const val DATA_BROADCAST = 22u +} + +object Proto { + const val TCP = 6u + const val UDP = 17u +} + +data class Msg( + var cmd: UInt, + var proto: UInt? = null, + var sid: UInt? = null, + var src: UInt? = null, + var sPort: UInt? = null, + var dst: UInt? = null, + var dPort: UInt? = null, + var data: String? = null +) { + override fun toString() = ls( + 1, cmd, proto, sid, src, sPort, dst, dPort, + null, null, null, null, null, null, null, null, // reserved for future use + data + ).joinToString(",") { it?.str ?: "" }.trimEnd(',') + + companion object { + val fields = arr(Msg::proto, Msg::sid, Msg::src, Msg::sPort, Msg::dst, Msg::dPort) + + fun fromString(str: String): Msg { + val sp = str.split(',') + return Msg(0u).apply { + cmd = sp[1].toUInt() + fields.forEachIndexed { i, f -> f.set(this, sp.getOrNull(i + 2)?.some?.toUIntOrNull()) } + data = sp.drop(16).joinToString(",") + } + } + } +} \ No newline at end of file