Skip to content

Commit 1303998

Browse files
committed
Refactor networking classes to make registration less scuffed
1 parent 8d10f5c commit 1303998

15 files changed

+214
-145
lines changed

Common/src/main/kotlin/gay/object/hexdebug/adapter/DebugAdapter.kt

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ import gay.`object`.hexdebug.adapter.proxy.DebugProxyServerLauncher
1616
import gay.`object`.hexdebug.debugger.*
1717
import gay.`object`.hexdebug.items.ItemDebugger
1818
import gay.`object`.hexdebug.items.ItemEvaluator
19-
import gay.`object`.hexdebug.networking.HexDebugNetworking
20-
import gay.`object`.hexdebug.networking.MsgDebuggerStateS2C
21-
import gay.`object`.hexdebug.networking.MsgEvaluatorStateS2C
22-
import gay.`object`.hexdebug.networking.MsgPrintDebuggerStatusS2C
19+
import gay.`object`.hexdebug.networking.msg.MsgDebuggerStateS2C
20+
import gay.`object`.hexdebug.networking.msg.MsgEvaluatorStateS2C
21+
import gay.`object`.hexdebug.networking.msg.MsgPrintDebuggerStatusS2C
2322
import gay.`object`.hexdebug.utils.futureOf
2423
import gay.`object`.hexdebug.utils.paginate
2524
import gay.`object`.hexdebug.utils.toFuture
@@ -62,7 +61,7 @@ open class DebugAdapter(val player: ServerPlayer) : IDebugProtocolServer {
6261
)
6362

6463
protected open fun setDebuggerState(debuggerState: ItemDebugger.DebugState) {
65-
HexDebugNetworking.sendToPlayer(player, MsgDebuggerStateS2C(debuggerState))
64+
MsgDebuggerStateS2C(debuggerState).sendToPlayer(player)
6665

6766
// close the debugger grid if we stopped debugging
6867
if (debuggerState == ItemDebugger.DebugState.NOT_DEBUGGING) {
@@ -72,18 +71,16 @@ open class DebugAdapter(val player: ServerPlayer) : IDebugProtocolServer {
7271
}
7372

7473
protected open fun setEvaluatorState(evalState: ItemEvaluator.EvalState) {
75-
HexDebugNetworking.sendToPlayer(player, MsgEvaluatorStateS2C(evalState))
74+
MsgEvaluatorStateS2C(evalState).sendToPlayer(player)
7675
}
7776

7877
protected open fun printDebuggerStatus(iota: String, index: Int) {
79-
HexDebugNetworking.sendToPlayer(
80-
player, MsgPrintDebuggerStatusS2C(
81-
iota = iota,
82-
index = index,
83-
line = state.initArgs.indexToLine(index),
84-
isConnected = state.isConnected,
85-
)
86-
)
78+
MsgPrintDebuggerStatusS2C(
79+
iota = iota,
80+
index = index,
81+
line = state.initArgs.indexToLine(index),
82+
isConnected = state.isConnected,
83+
).sendToPlayer(player)
8784
}
8885

8986
fun startDebugging(args: CastArgs): Boolean {

Common/src/main/kotlin/gay/object/hexdebug/adapter/proxy/DebugProxyClient.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import dev.architectury.event.events.client.ClientPlayerEvent
44
import gay.`object`.hexdebug.HexDebug
55
import gay.`object`.hexdebug.config.HexDebugConfig
66
import gay.`object`.hexdebug.items.ItemDebugger
7-
import gay.`object`.hexdebug.networking.HexDebugNetworking
8-
import gay.`object`.hexdebug.networking.MsgDebugAdapterProxyC2S
7+
import gay.`object`.hexdebug.networking.msg.MsgDebugAdapterProxyC2S
98
import io.ktor.network.selector.*
109
import io.ktor.network.sockets.*
1110
import io.ktor.utils.io.jvm.javaio.*
@@ -140,7 +139,7 @@ class DebugProxyClientProducer(input: InputStream) : StreamMessageProducer(input
140139

141140
// instead of parsing the message here, just forward it to the server
142141
val content = String(buffer, charset(headers.charset))
143-
HexDebugNetworking.sendToServer(MsgDebugAdapterProxyC2S(content))
142+
MsgDebugAdapterProxyC2S(content).sendToServer()
144143
} catch (exception: Exception) {
145144
// UnsupportedEncodingException can be thrown by String constructor
146145
// JsonParseException can be thrown by jsonHandler

Common/src/main/kotlin/gay/object/hexdebug/adapter/proxy/DebugProxyServer.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ package gay.`object`.hexdebug.adapter.proxy
22

33
import gay.`object`.hexdebug.adapter.DebugAdapter
44
import gay.`object`.hexdebug.adapter.IHexDebugLauncher
5-
import gay.`object`.hexdebug.networking.HexDebugNetworking
6-
import gay.`object`.hexdebug.networking.MsgDebugAdapterProxyS2C
5+
import gay.`object`.hexdebug.networking.msg.MsgDebugAdapterProxyS2C
76
import net.minecraft.server.level.ServerPlayer
87
import org.eclipse.lsp4j.debug.services.IDebugProtocolClient
98
import org.eclipse.lsp4j.jsonrpc.*
@@ -106,7 +105,7 @@ class DebugProxyServerConsumer(
106105
override fun consume(message: Message) {
107106
try {
108107
val content = jsonHandler.serialize(message)
109-
HexDebugNetworking.sendToPlayer(player, MsgDebugAdapterProxyS2C(content))
108+
MsgDebugAdapterProxyS2C(content).sendToPlayer(player)
110109
} catch (exception: IOException) {
111110
throw JsonRpcException(exception)
112111
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package gay.`object`.hexdebug.networking
2+
3+
import net.minecraft.server.level.ServerPlayer
4+
5+
interface HexDebugMessage
6+
7+
interface HexDebugMessageC2S : HexDebugMessage {
8+
fun sendToServer() = HexDebugNetworking.sendToServer(this)
9+
}
10+
11+
interface HexDebugMessageS2C : HexDebugMessage {
12+
fun sendToPlayer(player: ServerPlayer) = HexDebugNetworking.sendToPlayer(player, this)
13+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package gay.`object`.hexdebug.networking
2+
3+
import dev.architectury.networking.NetworkChannel
4+
import dev.architectury.networking.NetworkManager.PacketContext
5+
import gay.`object`.hexdebug.HexDebug
6+
import net.minecraft.network.FriendlyByteBuf
7+
import java.util.function.Supplier
8+
9+
interface HexDebugMessageCompanion<T : HexDebugMessage> {
10+
val type: Class<T>
11+
12+
fun decode(buf: FriendlyByteBuf): T
13+
14+
fun T.encode(buf: FriendlyByteBuf)
15+
16+
fun register(channel: NetworkChannel)
17+
18+
fun register(channel: NetworkChannel, apply: (T, Supplier<PacketContext>) -> Unit) {
19+
channel.register(type, { msg, buf -> msg.encode(buf) }, ::decode, apply)
20+
}
21+
}
22+
23+
interface HexDebugMessageCompanionC2S<T : HexDebugMessageC2S> : HexDebugMessageCompanion<T> {
24+
fun T.applyOnServer(ctx: PacketContext)
25+
26+
fun applyOnServer(msg: T, supplier: Supplier<PacketContext>) {
27+
HexDebug.LOGGER.debug("Client received packet: {}", this)
28+
msg.applyOnServer(supplier.get())
29+
}
30+
31+
override fun register(channel: NetworkChannel) {
32+
register(channel, ::applyOnServer)
33+
}
34+
}
35+
36+
interface HexDebugMessageCompanionS2C<T : HexDebugMessageS2C> : HexDebugMessageCompanion<T> {
37+
fun T.applyOnClient(ctx: PacketContext)
38+
39+
fun applyOnClient(msg: T, supplier: Supplier<PacketContext>) {
40+
val ctx = supplier.get()
41+
HexDebug.LOGGER.debug("Server received packet from {}: {}", ctx.player.name.string, this)
42+
msg.applyOnClient(ctx)
43+
}
44+
45+
override fun register(channel: NetworkChannel) {
46+
register(channel, ::applyOnClient)
47+
}
48+
}

Common/src/main/kotlin/gay/object/hexdebug/networking/HexDebugNetworking.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,23 @@ package gay.`object`.hexdebug.networking
22

33
import dev.architectury.networking.NetworkChannel
44
import gay.`object`.hexdebug.HexDebug
5+
import gay.`object`.hexdebug.networking.msg.*
56
import net.minecraft.server.level.ServerPlayer
67

78
object HexDebugNetworking {
89
private val CHANNEL = NetworkChannel.create(HexDebug.id("networking_channel"))
910

1011
fun init() {
11-
// FIXME: gross.
12-
CHANNEL.register(MsgDebugAdapterProxyC2S::class.java, MsgDebugAdapterProxyC2S::encode, ::MsgDebugAdapterProxyC2S, MsgDebugAdapterProxyC2S::apply)
13-
CHANNEL.register(MsgDebugAdapterProxyS2C::class.java, MsgDebugAdapterProxyS2C::encode, ::MsgDebugAdapterProxyS2C, MsgDebugAdapterProxyS2C::apply)
14-
CHANNEL.register(MsgDebuggerStateS2C::class.java, MsgDebuggerStateS2C::encode, ::MsgDebuggerStateS2C, MsgDebuggerStateS2C::apply)
15-
CHANNEL.register(MsgEvaluatorStateS2C::class.java, MsgEvaluatorStateS2C::encode, ::MsgEvaluatorStateS2C, MsgEvaluatorStateS2C::apply)
16-
CHANNEL.register(MsgPrintDebuggerStatusS2C::class.java, MsgPrintDebuggerStatusS2C::encode, ::MsgPrintDebuggerStatusS2C, MsgPrintDebuggerStatusS2C::apply)
12+
val messages = listOf(
13+
MsgDebugAdapterProxyC2S,
14+
MsgDebugAdapterProxyS2C,
15+
MsgDebuggerStateS2C,
16+
MsgEvaluatorStateS2C,
17+
MsgPrintDebuggerStatusS2C,
18+
)
19+
for (message in messages) {
20+
message.register(CHANNEL)
21+
}
1722
}
1823

1924
fun <T> sendToServer(message: T) = CHANNEL.sendToServer(message)

Common/src/main/kotlin/gay/object/hexdebug/networking/MsgDebugAdapterProxyC2S.kt

Lines changed: 0 additions & 22 deletions
This file was deleted.

Common/src/main/kotlin/gay/object/hexdebug/networking/MsgDebugAdapterProxyS2C.kt

Lines changed: 0 additions & 22 deletions
This file was deleted.

Common/src/main/kotlin/gay/object/hexdebug/networking/MsgDebuggerStateS2C.kt

Lines changed: 0 additions & 30 deletions
This file was deleted.

Common/src/main/kotlin/gay/object/hexdebug/networking/MsgEvaluatorStateS2C.kt

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)