From 418b342a1dfacb865482390de679e40e8e775e6d Mon Sep 17 00:00:00 2001 From: "jiahua.liu" Date: Mon, 27 Jan 2020 23:24:20 +0800 Subject: [PATCH] nothing --- .../mirai/qqandroid/io/serialization/JceEncoder.kt | 7 +++++++ .../network/protocol/jce/RequestPacket.kt | 4 ++-- .../protocol/packet/chat/receive/MessageSvc.kt | 14 ++++++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/JceEncoder.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/JceEncoder.kt index 4f24a0a11..449f25635 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/JceEncoder.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/JceEncoder.kt @@ -16,6 +16,11 @@ import net.mamoe.mirai.qqandroid.io.JceOutput import net.mamoe.mirai.utils.io.toUHexString import kotlin.reflect.KClass +fun ByteArray.loadAs(deserializer: DeserializationStrategy, c: Charset): T { + return Jce.byCharSet(c).load(deserializer, this) +} + + enum class JceCharset(val kotlinCharset: Charset) { GBK(Charset.forName("GBK")), UTF8(Charset.forName("UTF8")) @@ -355,4 +360,6 @@ class Jce private constructor(private val charset: JceCharset, context: SerialMo TODO() } + override fun + } diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/jce/RequestPacket.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/jce/RequestPacket.kt index 8c3717588..fc2d9d517 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/jce/RequestPacket.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/jce/RequestPacket.kt @@ -3,9 +3,9 @@ package net.mamoe.mirai.qqandroid.network.protocol.jce import kotlinx.serialization.SerialId import kotlinx.serialization.Serializable import net.mamoe.mirai.qqandroid.io.JceStruct -import net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY private val EMPTY_MAP = mapOf() +private val EMPTY_SBUFFER_MAP = mapOf() @Serializable class RequestPacket( @@ -15,7 +15,7 @@ class RequestPacket( @SerialId(4) val iRequestId: Int = 0, @SerialId(5) val sServantName: String = "", @SerialId(6) val sFuncName: String = "", - @SerialId(7) val sBuffer: ByteArray = EMPTY_BYTE_ARRAY, + @SerialId(7) val sBuffer: Map = EMPTY_SBUFFER_MAP, @SerialId(8) val iTimeout: Int = 0, @SerialId(9) val context: Map = EMPTY_MAP, @SerialId(10) val status: Map = EMPTY_MAP diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt index 9c1b9e456..3e4de9a30 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt @@ -1,16 +1,26 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.discardExact import net.mamoe.mirai.qqandroid.QQAndroidBot -import net.mamoe.mirai.qqandroid.io.readJceRequestBufferMapVersion2ToJceStruct +import net.mamoe.mirai.qqandroid.io.serialization.Jce +import net.mamoe.mirai.qqandroid.network.protocol.jce.RequestPacket import net.mamoe.mirai.qqandroid.network.protocol.packet.PacketFactory import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.data.RequestPushNotify import net.mamoe.mirai.utils.cryptor.contentToString +import net.mamoe.mirai.utils.io.readRemainingBytes class MessageSvc { internal object PushNotify : PacketFactory("MessageSvc.PushNotify") { override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): RequestPushNotify { - val messageNotification = readJceRequestBufferMapVersion2ToJceStruct(RequestPushNotify) + val req = Jce.UTF8.load( + RequestPacket.serializer(), + this.apply { discardExact(8) }.readRemainingBytes() + ) + val messageNotification = Jce.UTF8.load( + RequestPushNotify.serializer(), + req.sBuffer[0]!! + ) println(messageNotification.contentToString()) TODO() }