Make packets public and formatted, fix state machine change state incorrectly

This commit is contained in:
2026-09-05 13:22:00 +08:00
parent 15aefbb869
commit 799edce45f
96 files changed
+1718 -873

No files matched your search

@@ -7,6 +7,6 @@
package cn.rtast.libmc.mcping.rconlib
import cn.rtast.libmc.common._Buffer
import cn.rtast.libmc.common.BytesBuffer
internal fun _Buffer.writeNull() = writeByte(0x00)
internal fun BytesBuffer.writeNull() = writeByte(0x00)
@@ -8,9 +8,9 @@
package cn.rtast.libmc.mcping.rconlib
import cn.rtast.libmc.common.ByteOrder
import cn.rtast.libmc.common._Buffer
import cn.rtast.libmc.common._ReadChannel
import cn.rtast.libmc.common._WriteChannel
import cn.rtast.libmc.common.BytesBuffer
import cn.rtast.libmc.common.ReadChannel
import cn.rtast.libmc.common.WriteChannel
internal abstract class Packet {
abstract val requestId: Int
@@ -25,7 +25,7 @@ internal abstract class Packet {
open val length: Int
get() = 4 + 4 + payloadLength + 2
fun writePayload(buf: _Buffer) {
fun writePayload(buf: BytesBuffer) {
buf.writeInt(length, ByteOrder.LITTLE_ENDIAN)
buf.writeInt(requestId, ByteOrder.LITTLE_ENDIAN)
buf.writeInt(type, ByteOrder.LITTLE_ENDIAN)
@@ -35,11 +35,11 @@ internal abstract class Packet {
}
companion object Codec {
fun decode(channel: _ReadChannel): ResponsePacket {
fun decode(channel: ReadChannel): ResponsePacket {
val length = channel.readInt(ByteOrder.LITTLE_ENDIAN)
val requestId = channel.readInt(ByteOrder.LITTLE_ENDIAN)
val type = channel.readInt(ByteOrder.LITTLE_ENDIAN)
val payloadBuffer = _Buffer()
val payloadBuffer = BytesBuffer()
while (true) {
val b = channel.readByte()
if (b == 0x00.toByte()) break
@@ -73,11 +73,11 @@ internal data class ResponsePacket(
) : Packet()
internal fun _WriteChannel.sendPacket(packet: Packet) {
val buf = _Buffer()
internal fun WriteChannel.sendPacket(packet: Packet) {
val buf = BytesBuffer()
packet.writePayload(buf)
writeFully(buf.toByteArray())
flush()
}
internal fun _ReadChannel.readPacket(): ResponsePacket = Packet.decode(this)
internal fun ReadChannel.readPacket(): ResponsePacket = Packet.decode(this)
@@ -9,9 +9,9 @@
package cn.rtast.libmc.mcping.rconlib
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.common._ReadChannel
import cn.rtast.libmc.common._Socket
import cn.rtast.libmc.common._WriteChannel
import cn.rtast.libmc.common.ReadChannel
import cn.rtast.libmc.common.Socket
import cn.rtast.libmc.common.WriteChannel
import kotlin.jvm.JvmName
import kotlin.jvm.JvmOverloads
@@ -20,13 +20,13 @@ public class RCONClient internal constructor(
private val port: Int,
private val context: LibMCContext,
) : AutoCloseable {
private var socket: _Socket? = null
private var readChannel: _ReadChannel? = null
private var writeChannel: _WriteChannel? = null
private var socket: Socket? = null
private var readChannel: ReadChannel? = null
private var writeChannel: WriteChannel? = null
private var currentRequestId = 1
public fun connect(password: String): Boolean {
socket = _Socket(host, port, context)
socket = Socket(host, port, context)
readChannel = socket!!.openReadChannel()
writeChannel = socket!!.openWriteChannel()
val authPacket = AuthPacket(password, currentRequestId)