Commit ef7dd73d authored by Him188's avatar Him188

Add debug functions

parent 9145eeb4
...@@ -6,10 +6,7 @@ import kotlinx.io.core.ByteReadPacket ...@@ -6,10 +6,7 @@ import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.readBytes import kotlinx.io.core.readBytes
import kotlinx.io.core.readUInt import kotlinx.io.core.readUInt
import kotlinx.io.core.readULong import kotlinx.io.core.readULong
import net.mamoe.mirai.utils.io.UVarInt import net.mamoe.mirai.utils.io.*
import net.mamoe.mirai.utils.io.readUVarInt
import net.mamoe.mirai.utils.io.toReadPacket
import net.mamoe.mirai.utils.io.toUHexString
import kotlin.jvm.JvmStatic import kotlin.jvm.JvmStatic
// ProtoBuf utilities // ProtoBuf utilities
...@@ -143,29 +140,34 @@ fun ByteReadPacket.readProtoMap(length: Long = this.remaining): ProtoMap { ...@@ -143,29 +140,34 @@ fun ByteReadPacket.readProtoMap(length: Long = this.remaining): ProtoMap {
while (this.remaining != expectingRemaining) { while (this.remaining != expectingRemaining) {
require(this.remaining > expectingRemaining) { "Expecting to read $length bytes, but read ${expectingRemaining + length - this.remaining}" } require(this.remaining > expectingRemaining) { "Expecting to read $length bytes, but read ${expectingRemaining + length - this.remaining}" }
val id = ProtoFieldId(readUVarInt()) try {
val id = ProtoFieldId(readUVarInt())
fun readValue(): Any = when (id.type) { fun readValue(): Any = when (id.type) {
ProtoType.VAR_INT -> UVarInt(readUVarInt()) ProtoType.VAR_INT -> UVarInt(readUVarInt())
ProtoType.BIT_32 -> readUInt() ProtoType.BIT_32 -> readUInt()
ProtoType.BIT_64 -> readULong() ProtoType.BIT_64 -> readULong()
ProtoType.LENGTH_DELIMI -> tryReadProtoMapOrByteArray(readUVarInt().toInt()) ProtoType.LENGTH_DELIMI -> tryReadProtoMapOrByteArray(readUVarInt().toInt())
ProtoType.START_GROUP -> Unit ProtoType.START_GROUP -> Unit
ProtoType.END_GROUP -> Unit ProtoType.END_GROUP -> Unit
} }
if (map.containsKey(id)) { if (map.containsKey(id)) {
if (map[id] is MutableList<*>) { if (map[id] is MutableList<*>) {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
(map[id] as MutableList<Any>) += readValue() (map[id] as MutableList<Any>) += readValue()
} else {
map[id] = mutableListOf(map[id]!!)
@Suppress("UNCHECKED_CAST")
(map[id] as MutableList<Any>) += readValue()
}
} else { } else {
map[id] = mutableListOf(map[id]!!) map[id] = readValue()
@Suppress("UNCHECKED_CAST")
(map[id] as MutableList<Any>) += readValue()
} }
} else { } catch (e: IllegalStateException) {
map[id] = readValue() e.logStacktrace()
return map
} }
} }
return map return map
......
...@@ -10,6 +10,8 @@ import net.mamoe.mirai.utils.internal.printCompareHex ...@@ -10,6 +10,8 @@ import net.mamoe.mirai.utils.internal.printCompareHex
internal object DebugLogger : MiraiLogger by DefaultLogger("Packet Debug") internal object DebugLogger : MiraiLogger by DefaultLogger("Packet Debug")
internal fun Throwable.logStacktrace(message: String? = null) = DebugLogger.error(message, this)
internal fun debugPrintln(any: Any?) = DebugLogger.debug(any) internal fun debugPrintln(any: Any?) = DebugLogger.debug(any)
@Deprecated("Low efficiency, only for debug purpose", ReplaceWith("this")) @Deprecated("Low efficiency, only for debug purpose", ReplaceWith("this"))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment