Make packets public and formatted, fix state machine change state incorrectly
This commit is contained in:
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)
|
||||
|
||||
Reference in New Issue
Block a user