Skip to content

Commit

Permalink
Move to ktor 3 and kotlinx-io
Browse files Browse the repository at this point in the history
  • Loading branch information
hopskipnfall committed Feb 2, 2025
1 parent 08e1205 commit 1c29081
Show file tree
Hide file tree
Showing 51 changed files with 110 additions and 565 deletions.
496 changes: 0 additions & 496 deletions emulinker/src/main/java/org/emulinker/eval/client/EvalClient.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import io.ktor.utils.io.core.*
import java.nio.ByteBuffer
import kotlin.Result.Companion.failure
import kotlin.Result.Companion.success
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.ByteBufferMessage
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.pico.AppModule
import org.emulinker.util.EmuUtil

/**
* Abstract class representing a message for connecting to the server.
Expand Down Expand Up @@ -61,11 +61,11 @@ sealed class ConnectMessage : ByteBufferMessage() {
}

@Throws(MessageFormatException::class)
fun parse(byteReadPacket: ByteReadPacket): ConnectMessage {
fun parse(packet: Source): ConnectMessage {
val messageStr =
try {
// val stringDecoder = charset.newDecoder()
byteReadPacket.readText(AppModule.charsetDoNotUse)
packet.readText(AppModule.charsetDoNotUse)
// stringDecoder.decode(byteReadPacket).toString()
} catch (e: CharacterCodingException) {
throw MessageFormatException("Invalid bytes received: failed to decode to a string!", e)
Expand All @@ -89,9 +89,8 @@ sealed class ConnectMessage : ByteBufferMessage() {
}
// byteReadPacket.rewind()
else ->
throw MessageFormatException(
"Unrecognized connect message: " + EmuUtil.dumpBuffer(byteReadPacket.readByteBuffer())
)
// TODO(nue): Figure out how to dump all bytes from Sources.
throw MessageFormatException("Unrecognized connect message: TODO")
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.util.EmuUtil
Expand All @@ -21,7 +22,7 @@ sealed class Ack : V086Message() {
object ClientAckSerializer : MessageSerializer<ClientAck> {
override val messageTypeId: Byte = ClientAck.ID

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<ClientAck> {
override fun read(packet: Source, messageNumber: Int): Result<ClientAck> {
if (packet.remaining < 17) {
return parseFailure("Failed byte count validation!")
}
Expand Down Expand Up @@ -94,7 +95,7 @@ sealed class Ack : V086Message() {
object ServerAckSerializer : MessageSerializer<ServerAck> {
override val messageTypeId: Byte = ServerAck.ID

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<ServerAck> {
override fun read(packet: Source, messageNumber: Int): Result<ServerAck> {
if (packet.remaining < 17) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.util.EmuUtil
import org.emulinker.util.EmuUtil.toHexString
Expand Down Expand Up @@ -59,7 +60,7 @@ data class AllReady(override val messageNumber: Int) : V086Message(), ServerMess
return Result.success(AllReady(messageNumber))
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<AllReady> {
override fun read(packet: Source, messageNumber: Int): Result<AllReady> {
if (packet.remaining < 1) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.util.UnsignedUtil.getUnsignedByte
Expand Down Expand Up @@ -64,7 +65,7 @@ constructor(override val messageNumber: Int, val key: Int) :
return Result.success(CachedGameData(messageNumber, buffer.getUnsignedByte().toInt()))
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<CachedGameData> {
override fun read(packet: Source, messageNumber: Int): Result<CachedGameData> {
if (packet.remaining < 2) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.v086.V086Utils.getNumBytesPlusStopByte
import org.emulinker.util.EmuUtil
import org.emulinker.util.EmuUtil.readString
Expand Down Expand Up @@ -34,7 +35,7 @@ sealed class Chat : V086Message() {
object ChatSerializer : MessageSerializer<Chat> {
override val messageTypeId: Byte = ID

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<Chat> {
override fun read(packet: Source, messageNumber: Int): Result<Chat> {
if (packet.remaining < 3) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.util.EmuUtil
Expand Down Expand Up @@ -66,7 +67,7 @@ data class CloseGame(
return Result.success(CloseGame(messageNumber, gameID, val1))
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<CloseGame> {
override fun read(packet: Source, messageNumber: Int): Result<CloseGame> {
if (packet.remaining < 5) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.kaillera.controller.v086.V086Utils.getNumBytesPlusStopByte
Expand Down Expand Up @@ -87,7 +88,7 @@ constructor(
return Result.success(ConnectionRejected(messageNumber, userName, userID, message))
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<ConnectionRejected> {
override fun read(packet: Source, messageNumber: Int): Result<ConnectionRejected> {
if (packet.remaining < 6) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.kaillera.controller.v086.V086Utils.getNumBytesPlusStopByte
import org.emulinker.util.EmuUtil
Expand All @@ -26,7 +27,7 @@ sealed class CreateGame : V086Message() {
object CreateGameSerializer : MessageSerializer<CreateGame> {
override val messageTypeId: Byte = ID

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<CreateGame> {
override fun read(packet: Source, messageNumber: Int): Result<CreateGame> {
if (packet.remaining < 8) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils.getNumBytesPlusStopByte
import org.emulinker.util.EmuUtil
Expand Down Expand Up @@ -72,7 +73,7 @@ sealed class GameChat : V086Message() {
)
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<GameChat> {
override fun read(packet: Source, messageNumber: Int): Result<GameChat> {
if (packet.remaining < 3) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.readAvailable
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.util.UnsignedUtil.getUnsignedShort
Expand Down Expand Up @@ -120,7 +121,7 @@ constructor(override val messageNumber: Int, val gameData: ByteArray) :
return Result.success(create(messageNumber, gameData))
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<GameData> {
override fun read(packet: Source, messageNumber: Int): Result<GameData> {
if (packet.remaining < 4) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.util.UnsignedUtil.getUnsignedShort
Expand Down Expand Up @@ -56,7 +57,7 @@ constructor(override val messageNumber: Int, val userId: Int) : V086Message(), C
return Result.success(GameKick(messageNumber, buffer.getUnsignedShort()))
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<GameKick> {
override fun read(packet: Source, messageNumber: Int): Result<GameKick> {
if (packet.remaining < 3) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.util.EmuUtil
Expand Down Expand Up @@ -103,7 +104,7 @@ constructor(
)
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<GameStatus> {
override fun read(packet: Source, messageNumber: Int): Result<GameStatus> {
if (packet.remaining < 8) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils.getNumBytesPlusStopByte
import org.emulinker.util.EmuUtil
Expand Down Expand Up @@ -66,7 +67,7 @@ constructor(override val messageNumber: Int, val source: String, val message: St
return Result.success(InformationMessage(messageNumber, source, message))
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<InformationMessage> {
override fun read(packet: Source, messageNumber: Int): Result<InformationMessage> {
if (packet.remaining < 4) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlin.math.roundToLong
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.kaillera.controller.v086.V086Utils.getNumBytesPlusStopByte
Expand Down Expand Up @@ -124,7 +125,7 @@ sealed class JoinGame : V086Message() {
)
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<JoinGame> {
override fun read(packet: Source, messageNumber: Int): Result<JoinGame> {
if (packet.remaining < 13) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.util.UnsignedUtil.getUnsignedByte
Expand Down Expand Up @@ -54,7 +55,7 @@ constructor(override val messageNumber: Int, val value: Short) : V086Message(),
return Result.success(KeepAlive(messageNumber, buffer.getUnsignedByte()))
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<KeepAlive> {
override fun read(packet: Source, messageNumber: Int): Result<KeepAlive> {
if (packet.remaining < 1) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.ParseException

sealed interface MessageSerializer<E : V086Message> {
Expand All @@ -12,7 +12,7 @@ sealed interface MessageSerializer<E : V086Message> {

fun read(buffer: ByteBuf, messageNumber: Int): Result<E>

fun read(packet: ByteReadPacket, messageNumber: Int): Result<E>
fun read(packet: Source, messageNumber: Int): Result<E>

fun write(buffer: ByteBuffer, message: E)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlinx.io.Source
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.kaillera.controller.v086.V086Utils.getNumBytesPlusStopByte
import org.emulinker.util.EmuUtil
Expand Down Expand Up @@ -62,7 +63,7 @@ sealed class PlayerDrop : V086Message() {
)
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<PlayerDrop> {
override fun read(packet: Source, messageNumber: Int): Result<PlayerDrop> {
if (packet.remaining < 2) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package org.emulinker.kaillera.controller.v086.protocol

import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.readInt
import io.ktor.utils.io.core.remaining
import io.netty.buffer.ByteBuf
import java.nio.ByteBuffer
import kotlin.math.roundToLong
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.io.Source
import org.emulinker.kaillera.controller.messaging.MessageFormatException
import org.emulinker.kaillera.controller.v086.V086Utils
import org.emulinker.kaillera.controller.v086.V086Utils.getNumBytesPlusStopByte
Expand Down Expand Up @@ -154,7 +154,7 @@ data class PlayerInformation(override val messageNumber: Int, val players: List<
return Result.success(PlayerInformation(messageNumber, players))
}

override fun read(packet: ByteReadPacket, messageNumber: Int): Result<PlayerInformation> {
override fun read(packet: Source, messageNumber: Int): Result<PlayerInformation> {
if (packet.remaining < 5) {
return parseFailure("Failed byte count validation!")
}
Expand Down
Loading

0 comments on commit 1c29081

Please sign in to comment.