diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt index b1ee9c6fd..9580ed3e0 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt @@ -9,9 +9,9 @@ package net.mamoe.mirai.qqandroid -import io.ktor.utils.io.core.Closeable import kotlinx.coroutines.launch import kotlinx.coroutines.withTimeoutOrNull +import kotlinx.io.core.Closeable import net.mamoe.mirai.LowLevelAPI import net.mamoe.mirai.contact.* import net.mamoe.mirai.data.* diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/Jce.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/Jce.kt index 87ec126c1..bf381f7ea 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/Jce.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/Jce.kt @@ -9,8 +9,8 @@ package net.mamoe.mirai.qqandroid.io.serialization -import io.ktor.utils.io.charsets.Charset -import io.ktor.utils.io.core.* +import kotlinx.io.charsets.Charset +import kotlinx.io.core.* import kotlinx.serialization.* import kotlinx.serialization.internal.* import kotlinx.serialization.modules.EmptyModule diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/utils.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/utils.kt index 3b3856cb7..fe8e46dd8 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/utils.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/io/serialization/utils.kt @@ -12,10 +12,7 @@ package net.mamoe.mirai.qqandroid.io.serialization -import io.ktor.utils.io.core.BytePacketBuilder -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.readBytes -import io.ktor.utils.io.core.writeFully +import kotlinx.io.core.* import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.SerialDescriptor import kotlinx.serialization.SerializationStrategy diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt index e23516c3b..bfa2ac150 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/messages.kt @@ -9,7 +9,10 @@ package net.mamoe.mirai.qqandroid.message -import io.ktor.utils.io.core.* +import kotlinx.io.core.buildPacket +import kotlinx.io.core.discardExact +import kotlinx.io.core.readBytes +import kotlinx.io.core.readUInt import net.mamoe.mirai.LowLevelAPI import net.mamoe.mirai.contact.Member import net.mamoe.mirai.message.data.* diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt index 76df1763d..9a507ab35 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt @@ -11,9 +11,9 @@ package net.mamoe.mirai.qqandroid.network -import io.ktor.utils.io.core.* import kotlinx.atomicfu.AtomicInt import kotlinx.atomicfu.atomic +import kotlinx.io.core.* import net.mamoe.mirai.BotAccount import net.mamoe.mirai.RawAccountIdUse import net.mamoe.mirai.data.OnlineStatus @@ -315,7 +315,7 @@ internal class Pt4Token(data: ByteArray, creationTime: Long, expireTime: Long) : internal typealias PSKeyMap = MutableMap internal typealias Pt4TokenMap = MutableMap -internal inline fun Input.readUShortLVString(): String = io.ktor.utils.io.core.String(this.readUShortLVByteArray()) +internal inline fun Input.readUShortLVString(): String = kotlinx.io.core.String(this.readUShortLVByteArray()) internal inline fun Input.readUShortLVByteArray(): ByteArray = this.readBytes(this.readUShort().toInt()) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/HighwayHelper.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/HighwayHelper.kt index 61dd755c2..c219a9881 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/HighwayHelper.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/HighwayHelper.kt @@ -18,14 +18,14 @@ import io.ktor.http.content.OutgoingContent import io.ktor.http.userAgent import io.ktor.utils.io.ByteReadChannel import io.ktor.utils.io.copyAndClose -import io.ktor.utils.io.core.Input -import io.ktor.utils.io.core.readAvailable -import io.ktor.utils.io.core.readInt -import io.ktor.utils.io.core.use -import io.ktor.utils.io.pool.useInstance import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.flow.collect import kotlinx.io.InputStream +import kotlinx.io.core.Input +import kotlinx.io.core.discardExact +import kotlinx.io.core.readAvailable +import kotlinx.io.core.use +import kotlinx.io.pool.useInstance import net.mamoe.mirai.qqandroid.io.serialization.readProtoBuf import net.mamoe.mirai.qqandroid.network.QQAndroidClient import net.mamoe.mirai.qqandroid.network.protocol.data.proto.CSDataHighwayHead diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/highway.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/highway.kt index cf13c882a..b84834661 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/highway.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/highway.kt @@ -12,10 +12,13 @@ package net.mamoe.mirai.qqandroid.network.highway import io.ktor.utils.io.ByteReadChannel -import io.ktor.utils.io.core.* import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import kotlinx.io.InputStream +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Input +import kotlinx.io.core.buildPacket +import kotlinx.io.core.writeFully import net.mamoe.mirai.qqandroid.io.serialization.toByteArray import net.mamoe.mirai.qqandroid.network.QQAndroidClient import net.mamoe.mirai.qqandroid.network.protocol.data.proto.CSDataHighwayHead diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/Cmd0x857.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/Cmd0x857.kt deleted file mode 100644 index 2586189c4..000000000 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/Cmd0x857.kt +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Copyright 2020 Mamoe Technologies and contributors. - * - * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. - * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. - * - * https://github.com/mamoe/mirai/blob/master/LICENSE - */ - -@file:Suppress("SpellCheckingInspection") - -package net.mamoe.mirai.qqandroid.network.protocol.data.proto - -import kotlinx.serialization.SerialId -import kotlinx.serialization.Serializable -import kotlinx.serialization.protobuf.ProtoNumberType -import kotlinx.serialization.protobuf.ProtoType -import net.mamoe.mirai.qqandroid.io.ProtoBuf -import net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY - -class GroupOpenSysMsg : ProtoBuf { - @Serializable - class LightApp( - @SerialId(1) val app: String = "", - @SerialId(2) val view: String = "", - @SerialId(3) val desc: String = "", - @SerialId(4) val prompt: String = "", - @SerialId(5) val ver: String = "", - @SerialId(6) val meta: String = "", - @SerialId(7) val config: String = "", - @SerialId(8) val source: Source? = null - ) : ProtoBuf - - @Serializable - class RichMsg( - @SerialId(1) val title: String = "", - @SerialId(2) val desc: String = "", - @SerialId(3) val brief: String = "", - @SerialId(4) val cover: String = "", - @SerialId(5) val url: String = "", - @SerialId(6) val source: Source? = null - ) : ProtoBuf - - @Serializable - class Sender( - @SerialId(1) val uin: Long = 0L, - @SerialId(2) val nick: String = "", - @SerialId(3) val avatar: String = "", - @SerialId(4) val url: String = "" - ) : ProtoBuf - - @Serializable - class Source( - @SerialId(1) val name: String = "", - @SerialId(2) val icon: String = "", - @SerialId(3) val url: String = "" - ) : ProtoBuf - - @Serializable - class SysMsgBody( - @SerialId(1) val groupId: Long = 0L, - @SerialId(2) val appid: Long = 0L, - @SerialId(3) val sender: Sender? = null, - @SerialId(4) val msgType: Int = 0, - @SerialId(5) val content: String = "", - @SerialId(6) val richMsg: RichMsg? = null, - @SerialId(7) val lightApp: LightApp? = null - ) : ProtoBuf -} - -@Serializable -class TroopTips0x857 : ProtoBuf { - @Serializable - class AIOGrayTipsInfo( - @SerialId(1) val optUint32ShowLastest: Int = 0, - @SerialId(2) val optBytesContent: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(3) val optUint32Remind: Int = 0, - @SerialId(4) val optBytesBrief: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(5) val receiverUin: Long = 0L, - @SerialId(6) val reliaoAdminOpt: Int = 0, - @SerialId(7) val robotGroupOpt: Int = 0 - ) : ProtoBuf - - @Serializable - class AIOTopTipsInfo( - @SerialId(1) val optBytesContent: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(2) val optUint32Icon: Int = 0, - @SerialId(3) val optEnumAction: Int /* enum */ = 1, - @SerialId(4) val optBytesUrl: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(5) val optBytesData: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(6) val optBytesDataI: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(7) val optBytesDataA: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(8) val optBytesDataP: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class FloatedTipsInfo( - @SerialId(1) val optBytesContent: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class GeneralGrayTipInfo( - @SerialId(1) val busiType: Long = 0L, - @SerialId(2) val busiId: Long = 0L, - @SerialId(3) val ctrlFlag: Int = 0, - @SerialId(4) val c2cType: Int = 0, - @SerialId(5) val serviceType: Int = 0, - @SerialId(6) val templId: Long = 0L, - @SerialId(7) val msgTemplParam: List? = null, - @SerialId(8) val content: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(10) val tipsSeqId: Long = 0L, - @SerialId(100) val pbReserv: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class GoldMsgTipsElem( - @SerialId(1) val type: Int = 0, - @SerialId(2) val billno: String = "", - @SerialId(3) val result: Int = 0, - @SerialId(4) val amount: Int = 0, - @SerialId(5) val total: Int = 0, - @SerialId(6) val interval: Int = 0, - @SerialId(7) val finish: Int = 0, - @SerialId(8) val uin: List? = null, - @SerialId(9) val action: Int = 0 - ) : ProtoBuf - - @Serializable - class GroupInfoChange( - @SerialId(1) val groupHonorSwitch: Int = 0 - ) : ProtoBuf - - @Serializable - class GroupNotifyInfo( - @SerialId(1) val optUint32AutoPullFlag: Int = 0, - @SerialId(2) val optBytesFeedsId: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class InstCtrl( - @SerialId(1) val msgSendToInst: List? = null, - @SerialId(2) val msgExcludeInst: List? = null, - @SerialId(3) val msgFromInst: InstInfo? = null - ) : ProtoBuf - - @Serializable - class InstInfo( - @SerialId(1) val apppid: Int = 0, - @SerialId(2) val instid: Int = 0, - @SerialId(3) val platform: Int = 0, - @SerialId(4) val openAppid: Int = 0, - @SerialId(5) val productid: Int = 0, - @SerialId(6) val ssoBid: Int = 0, - @SerialId(7) val guid: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(8) val verMin: Int = 0, - @SerialId(9) val verMax: Int = 0 - ) : ProtoBuf - - @Serializable - class LbsShareChangePushInfo( - @SerialId(1) val msgType: Int = 0, - @SerialId(2) val msgInfo: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(3) val versionCtrl: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(4) val groupId: Long = 0L, - @SerialId(5) val operUin: Long = 0L, - @SerialId(6) val grayTips: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(7) val msgSeq: Long = 0L, - @SerialId(8) val joinNums: Int = 0, - @SerialId(99) val pushType: Int = 0, - @SerialId(100) val extInfo: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class LuckyBagNotify( - @SerialId(1) val msgTips: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class MediaChangePushInfo( - @SerialId(1) val msgType: Int = 0, - @SerialId(2) val msgInfo: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(3) val versionCtrl: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(4) val groupId: Long = 0L, - @SerialId(5) val operUin: Long = 0L, - @SerialId(6) val grayTips: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(7) val msgSeq: Long = 0L, - @SerialId(8) val joinNums: Int = 0, - @SerialId(9) val msgPerSetting: PersonalSetting? = null, - @SerialId(10) val playMode: Int = 0, - @SerialId(99) val mediaType: Int = 0, - @SerialId(100) val extInfo: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf { - @Serializable - class PersonalSetting( - @SerialId(1) val themeId: Int = 0, - @SerialId(2) val playerId: Int = 0, - @SerialId(3) val fontId: Int = 0 - ) : ProtoBuf - } - - @Serializable - class MessageBoxInfo( - @SerialId(1) val optBytesContent: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(2) val optBytesTitle: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(3) val optBytesButton: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class MessageRecallReminder( - @SerialId(1) val uin: Long = 0L, - @SerialId(2) val nickname: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(3) val recalledMsgList: List = listOf(), - @SerialId(4) val reminderContent: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(5) val userdef: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(6) val groupType: Int = 0, - @SerialId(7) val opType: Int = 0 - ) : ProtoBuf { - @Serializable - class MessageMeta( - @SerialId(1) val seq: Int = 0, - @SerialId(2) val time: Int = 0, - @SerialId(3) val msgRandom: Int = 0, - @SerialId(4) val msgType: Int = 0, - @SerialId(5) val msgFlag: Int = 0, - @SerialId(6) val authorUin: Long = 0L - ) : ProtoBuf - } - - @Serializable - class MiniAppNotify( - @SerialId(1) val msg: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class NotifyMsgBody( - @SerialId(1) val optEnumType: Int /* enum */ = 1, - @SerialId(2) val optUint64MsgTime: Long = 0L, - @SerialId(3) val optUint64MsgExpires: Long = 0L, - @SerialId(4) val optUint64GroupCode: Long = 0L, - @SerialId(5) val optMsgGraytips: AIOGrayTipsInfo? = null, - @SerialId(6) val optMsgMessagebox: MessageBoxInfo? = null, - @SerialId(7) val optMsgFloatedtips: FloatedTipsInfo? = null, - @SerialId(8) val optMsgToptips: AIOTopTipsInfo? = null, - @SerialId(9) val optMsgRedtips: RedGrayTipsInfo? = null, - @SerialId(10) val optMsgGroupNotify: GroupNotifyInfo? = null, - @SerialId(11) val optMsgRecall: MessageRecallReminder? = null, - @SerialId(12) val optMsgThemeNotify: ThemeStateNotify? = null, - @SerialId(13) val serviceType: Int = 0, - @SerialId(14) val optMsgObjmsgUpdate: NotifyObjmsgUpdate? = null, - @SerialId(15) val optMsgWerewolfPush: WereWolfPush? = null, - // @SerialId(16) val optStcmGameState: ApolloGameStatus.STCMGameMessage? = null, - // @SerialId(17) val aplloMsgPush: ApolloPushMsgInfo.STPushMsgElem? = null, - @SerialId(18) val optMsgGoldtips: GoldMsgTipsElem? = null, - @SerialId(20) val optMsgMiniappNotify: MiniAppNotify? = null, - @SerialId(21) val optUint64SenderUin: Long = 0L, - @SerialId(22) val optMsgLuckybagNotify: LuckyBagNotify? = null, - @SerialId(23) val optMsgTroopformtipsPush: TroopFormGrayTipsInfo? = null, - @SerialId(24) val optMsgMediaPush: MediaChangePushInfo? = null, - @SerialId(26) val optGeneralGrayTip: GeneralGrayTipInfo? = null, - @SerialId(27) val optMsgVideoPush: VideoChangePushInfo? = null, - @SerialId(28) val optLbsShareChangePlusInfo: LbsShareChangePushInfo? = null, - @SerialId(29) val optMsgSingPush: SingChangePushInfo? = null, - @SerialId(30) val optMsgGroupInfoChange: GroupInfoChange? = null - ) : ProtoBuf - - @Serializable - class NotifyObjmsgUpdate( - @SerialId(1) val objmsgId: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(2) val updateType: Int = 0, - @SerialId(3) val extMsg: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class RedGrayTipsInfo( - @SerialId(1) val optUint32ShowLastest: Int = 0, - @SerialId(2) val senderUin: Long = 0L, - @SerialId(3) val receiverUin: Long = 0L, - @SerialId(4) val senderRichContent: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(5) val receiverRichContent: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(6) val authkey: ByteArray = EMPTY_BYTE_ARRAY, - @ProtoType(ProtoNumberType.SIGNED) @SerialId(7) val sint32Msgtype: Int = 0, - @SerialId(8) val luckyFlag: Int = 0, - @SerialId(9) val hideFlag: Int = 0, - @SerialId(10) val pcBody: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(11) val icon: Int = 0, - @SerialId(12) val luckyUin: Long = 0L, - @SerialId(13) val time: Int = 0, - @SerialId(14) val random: Int = 0, - @SerialId(15) val broadcastRichContent: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(16) val idiom: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(17) val idiomSeq: Int = 0, - @SerialId(18) val idiomAlpha: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(19) val jumpurl: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class ReqBody( - @SerialId(1) val optUint64GroupCode: Long = 0L, - @SerialId(2) val uint64Memberuins: List? = null, - @SerialId(3) val optUint32Offline: Int = 0, - @SerialId(4) val msgInstCtrl: InstCtrl? = null, - @SerialId(5) val optBytesMsg: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(6) val optUint32BusiType: Int = 0 - ) : ProtoBuf - - @Serializable - class RspBody( - @SerialId(1) val optUint64GroupCode: Long = 0L - ) : ProtoBuf - - @Serializable - class SingChangePushInfo( - @SerialId(1) val seq: Long = 0L, - @SerialId(2) val actionType: Int = 0, - @SerialId(3) val groupId: Long = 0L, - @SerialId(4) val operUin: Long = 0L, - @SerialId(5) val grayTips: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(6) val joinNums: Int = 0 - ) : ProtoBuf - - @Serializable - class TemplParam( - @SerialId(1) val name: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(2) val value: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class ThemeStateNotify( - @SerialId(1) val state: Int = 0, - @SerialId(2) val feedsId: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(3) val themeName: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(4) val actionUin: Long = 0L, - @SerialId(5) val createUin: Long = 0L - ) : ProtoBuf - - @Serializable - class TroopFormGrayTipsInfo( - @SerialId(1) val writerUin: Long = 0L, - @SerialId(2) val creatorUin: Long = 0L, - @SerialId(3) val richContent: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(4) val optBytesUrl: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(5) val creatorNick: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class VideoChangePushInfo( - @SerialId(1) val seq: Long = 0L, - @SerialId(2) val actionType: Int = 0, - @SerialId(3) val groupId: Long = 0L, - @SerialId(4) val operUin: Long = 0L, - @SerialId(5) val grayTips: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(6) val joinNums: Int = 0, - @SerialId(100) val extInfo: ByteArray = EMPTY_BYTE_ARRAY - ) : ProtoBuf - - @Serializable - class WereWolfPush( - @SerialId(1) val pushType: Int = 0, - @SerialId(2) val gameRoom: Long = 0L, - @SerialId(3) val enumGameState: Int = 0, - @SerialId(4) val gameRound: Int = 0, - @SerialId(5) val roles: List? = null, - @SerialId(6) val speaker: Long = 0L, - @SerialId(7) val judgeUin: Long = 0L, - @SerialId(8) val judgeWords: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(9) val enumOperation: Int = 0, - @SerialId(10) val srcUser: Long = 0L, - @SerialId(11) val dstUser: Long = 0L, - @SerialId(12) val deadUsers: List? = null, - @SerialId(13) val gameResult: Int = 0, - @SerialId(14) val timeoutSec: Int = 0, - @SerialId(15) val killConfirmed: Int = 0, - @SerialId(16) val judgeNickname: ByteArray = EMPTY_BYTE_ARRAY, - @SerialId(17) val votedTieUsers: List? = null - ) : ProtoBuf { - @Serializable - class GameRecord( - @SerialId(1) val total: Int = 0, - @SerialId(2) val win: Int = 0, - @SerialId(3) val lose: Int = 0, - @SerialId(4) val draw: Int = 0 - ) : ProtoBuf - - @Serializable - class Role( - @SerialId(1) val uin: Long = 0L, - @SerialId(2) val enumType: Int = 0, - @SerialId(3) val enumState: Int = 0, - @SerialId(4) val canSpeak: Int = 0, - @SerialId(5) val canListen: Int = 0, - @SerialId(6) val position: Int = 0, - @SerialId(7) val canVote: Int = 0, - @SerialId(8) val canVoted: Int = 0, - @SerialId(9) val alreadyChecked: Int = 0, - @SerialId(10) val alreadySaved: Int = 0, - @SerialId(11) val alreadyPoisoned: Int = 0, - @SerialId(12) val playerState: Int = 0, - @SerialId(13) val enumDeadOp: Int = 0, - @SerialId(14) val enumOperation: Int = 0, - @SerialId(15) val dstUser: Long = 0L, - @SerialId(16) val operationRound: Int = 0, - @SerialId(17) val msgGameRecord: GameRecord? = null, - @SerialId(18) val isWerewolf: Int = 0, - @SerialId(19) val defendedUser: Long = 0L, - @SerialId(20) val isSheriff: Int = 0 - ) : ProtoBuf - } -} \ No newline at end of file diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/EncryptMethod.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/EncryptMethod.kt index 697028560..80d0d6141 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/EncryptMethod.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/EncryptMethod.kt @@ -9,7 +9,10 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet -import io.ktor.utils.io.core.* +import kotlinx.io.core.BytePacketBuilder +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.buildPacket +import kotlinx.io.core.writeFully import net.mamoe.mirai.qqandroid.network.QQAndroidClient import net.mamoe.mirai.utils.cryptor.ECDH import net.mamoe.mirai.utils.cryptor.ECDHKeyPair diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt index 45485aa7a..f13ec933d 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt @@ -10,7 +10,10 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet -import io.ktor.utils.io.core.* +import kotlinx.io.core.BytePacketBuilder +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.buildPacket +import kotlinx.io.core.writeFully import net.mamoe.mirai.qqandroid.network.QQAndroidClient import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.io.encryptAndWrite @@ -43,7 +46,6 @@ internal inline fun OutgoingPacketFactory<*>.buildOutgoingUniPacket( body: BytePacketBuilder.(sequenceId: Int) -> Unit ): OutgoingPacket { - @Suppress("DuplicatedCode") return OutgoingPacket(name, commandName, sequenceId, buildPacket { writeIntLVPacket(lengthOffset = { it + 4 }) { writeInt(0x0B) @@ -52,7 +54,7 @@ internal inline fun OutgoingPacketFactory<*>.buildOutgoingUniPacket( writeByte(0) client.uin.toString().let { writeInt(it.length + 4) - writeText(it) + writeStringUtf8(it) } encryptAndWrite(key) { writeUniPacket(commandName, client.outgoingPacketSessionId, extraData) { @@ -75,7 +77,6 @@ internal inline fun IncomingPacketFactory<*>.buildResponseUniPacket( sequenceId: Int = client.nextSsoSequenceId(), body: BytePacketBuilder.(sequenceId: Int) -> Unit ): OutgoingPacket { - @Suppress("DuplicatedCode") return OutgoingPacket(name, commandName, sequenceId, buildPacket { writeIntLVPacket(lengthOffset = { it + 4 }) { writeInt(0x0B) @@ -84,7 +85,7 @@ internal inline fun IncomingPacketFactory<*>.buildResponseUniPacket( writeByte(0) client.uin.toString().let { writeInt(it.length + 4) - writeText(it) + writeStringUtf8(it) } encryptAndWrite(key) { writeUniPacket(commandName, client.outgoingPacketSessionId, extraData) { @@ -105,7 +106,7 @@ internal inline fun BytePacketBuilder.writeUniPacket( writeIntLVPacket(lengthOffset = { it + 4 }) { commandName.let { writeInt(it.length + 4) - writeText(it) + writeStringUtf8(it) } writeInt(4 + 4) @@ -152,7 +153,7 @@ internal inline fun OutgoingPacketFactory<*>.buildLoginOutgoingPacket( client.uin.toString().let { writeInt(it.length + 4) - writeText(it) + writeStringUtf8(it) } if (key === NO_ENCRYPT) { @@ -207,7 +208,7 @@ internal inline fun BytePacketBuilder.writeSsoPacket( } commandName.let { writeInt(it.length + 4) - writeText(it) + writeStringUtf8(it) } writeInt(4 + 4) @@ -215,7 +216,7 @@ internal inline fun BytePacketBuilder.writeSsoPacket( client.device.imei.let { writeInt(it.length + 4) - writeText(it) + writeStringUtf8(it) } writeInt(4) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt index 1f62d375b..020a45d2d 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt @@ -9,8 +9,8 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet -import io.ktor.utils.io.core.* -import io.ktor.utils.io.pool.useInstance +import kotlinx.io.core.* +import kotlinx.io.pool.useInstance import net.mamoe.mirai.data.Packet import net.mamoe.mirai.event.Event import net.mamoe.mirai.qqandroid.QQAndroidBot diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt index 0e83f4817..7f5d44ac1 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt @@ -9,7 +9,10 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet -import io.ktor.utils.io.core.* +import kotlinx.io.core.BytePacketBuilder +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.toByteArray +import kotlinx.io.core.writeFully import net.mamoe.mirai.qqandroid.network.protocol.LoginType import net.mamoe.mirai.qqandroid.utils.NetworkType import net.mamoe.mirai.utils.currentTimeMillis diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/PbMessageSvc.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/PbMessageSvc.kt index 7cfb9fc93..71e593cac 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/PbMessageSvc.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/PbMessageSvc.kt @@ -9,7 +9,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat -import io.ktor.utils.io.core.ByteReadPacket +import kotlinx.io.core.ByteReadPacket import net.mamoe.mirai.data.Packet import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.io.serialization.readProtoBuf diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt index 50faee7e5..b958354d7 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt @@ -9,7 +9,10 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat -import io.ktor.utils.io.core.* +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.buildPacket +import kotlinx.io.core.readBytes +import kotlinx.io.core.toByteArray import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.Member import net.mamoe.mirai.data.Packet @@ -375,7 +378,7 @@ internal class TroopManagement { OutgoingPacketFactory("friendlist.ModifyGroupCardReq") { object Response : Packet - override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response { + override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): EditGroupNametag.Response { return Response } diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImgStore.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImgStore.kt index 6b46fc0e2..6ac6e0b69 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImgStore.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/ImgStore.kt @@ -9,7 +9,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image -import io.ktor.utils.io.core.ByteReadPacket +import kotlinx.io.core.ByteReadPacket import net.mamoe.mirai.data.Packet import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.io.serialization.readProtoBuf diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/LongConn.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/LongConn.kt index 743f3e103..b4cf13881 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/LongConn.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/image/LongConn.kt @@ -9,7 +9,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image -import io.ktor.utils.io.core.ByteReadPacket +import kotlinx.io.core.ByteReadPacket import net.mamoe.mirai.data.Packet import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.io.serialization.readProtoBuf 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 38a148d35..0a83fb747 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 @@ -9,9 +9,10 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive -import io.ktor.utils.io.core.ByteReadPacket import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.* +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.discardExact import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.MemberPermission import net.mamoe.mirai.data.MemberInfo diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/list/FriendList.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/list/FriendList.kt index 0c218bf7c..f2ab4eef9 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/list/FriendList.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/list/FriendList.kt @@ -9,7 +9,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.list -import io.ktor.utils.io.core.ByteReadPacket +import kotlinx.io.core.ByteReadPacket import net.mamoe.mirai.data.Packet import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.io.serialization.decodeUniPacket diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/ConfigPushSvc.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/ConfigPushSvc.kt index 0ea8c4ec5..1341f7f7b 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/ConfigPushSvc.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/ConfigPushSvc.kt @@ -9,7 +9,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.login -import io.ktor.utils.io.core.ByteReadPacket +import kotlinx.io.core.ByteReadPacket import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.io.serialization.JceCharset import net.mamoe.mirai.qqandroid.io.serialization.decodeUniPacket diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/StatSvc.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/StatSvc.kt index f46297e34..c513076b4 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/StatSvc.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/StatSvc.kt @@ -9,7 +9,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.login -import io.ktor.utils.io.core.ByteReadPacket +import kotlinx.io.core.ByteReadPacket import net.mamoe.mirai.data.Packet import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.io.serialization.* diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/WtLogin.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/WtLogin.kt index 36d7b5857..6ee16aa42 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/WtLogin.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/WtLogin.kt @@ -11,7 +11,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.login import io.ktor.util.InternalAPI -import io.ktor.utils.io.core.* +import kotlinx.io.core.* import net.mamoe.mirai.data.Packet import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.network.* @@ -288,7 +288,7 @@ internal class WtLogin { } class Picture( - val data: ByteArray, + val data: IoBuffer, val sign: ByteArray ) : Captcha() { override fun toString(): String = "LoginPacketResponse.Captcha.Picture" @@ -394,8 +394,11 @@ internal class WtLogin { imageData.discardExact(2)//image Length val sign = imageData.readBytes(signInfoLength.toInt()) + + val buffer = IoBuffer.Pool.borrow() + imageData.readAvailable(buffer) return LoginPacketResponse.Captcha.Picture( - data = imageData.readBytes(), + data = buffer, sign = sign ) // } else error("UNKNOWN CAPTCHA QUESTION: ${question.toUHexString()}, tlvMap=" + tlvMap.contentToString()) diff --git a/mirai-core-qqandroid/src/commonTest/kotlin/test/printing.kt b/mirai-core-qqandroid/src/commonTest/kotlin/test/printing.kt index f2fc92dac..043d67d47 100644 --- a/mirai-core-qqandroid/src/commonTest/kotlin/test/printing.kt +++ b/mirai-core-qqandroid/src/commonTest/kotlin/test/printing.kt @@ -11,11 +11,11 @@ package test -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.Input -import io.ktor.utils.io.core.readAvailable -import io.ktor.utils.io.core.use -import io.ktor.utils.io.pool.useInstance +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Input +import kotlinx.io.core.readAvailable +import kotlinx.io.core.use +import kotlinx.io.pool.useInstance import net.mamoe.mirai.utils.DefaultLogger import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiLoggerWithSwitch diff --git a/mirai-core-qqandroid/src/jvmTest/kotlin/net.mamoe.mirai.qqandroid.io.serialization/JceDecoderTest.kt b/mirai-core-qqandroid/src/jvmTest/kotlin/net.mamoe.mirai.qqandroid.io.serialization/JceDecoderTest.kt index 2f67a7195..a782d38f3 100644 --- a/mirai-core-qqandroid/src/jvmTest/kotlin/net.mamoe.mirai.qqandroid.io.serialization/JceDecoderTest.kt +++ b/mirai-core-qqandroid/src/jvmTest/kotlin/net.mamoe.mirai.qqandroid.io.serialization/JceDecoderTest.kt @@ -11,7 +11,7 @@ package net.mamoe.mirai.qqandroid.io.serialization /* -import io.ktor.utils.io.core.readBytes +import kotlinx.io.core.readBytes import kotlinx.serialization.SerialId import kotlinx.serialization.Serializable import net.mamoe.mirai.qqandroid.io.JceOutput diff --git a/mirai-core-qqandroid/src/jvmTest/kotlin/test/ProtoBufDataClassGenerator.kt b/mirai-core-qqandroid/src/jvmTest/kotlin/test/ProtoBufDataClassGenerator.kt index 860aa0b78..b456838cb 100644 --- a/mirai-core-qqandroid/src/jvmTest/kotlin/test/ProtoBufDataClassGenerator.kt +++ b/mirai-core-qqandroid/src/jvmTest/kotlin/test/ProtoBufDataClassGenerator.kt @@ -28,7 +28,7 @@ fun main() { println( File( """ - E:\Projects\QQAndroidFF\app\src\main\java\tencent\im\oidb\cmd0x857 + E:\Projects\QQAndroidFF\app\src\main\java\tencent\im\msgrevoke """.trimIndent() ) .generateUnarrangedClasses().toMutableList().arrangeClasses().joinToString("\n\n") diff --git a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/ExternalImageAndroid.kt b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/ExternalImageAndroid.kt index 328af2a50..06eaee34e 100644 --- a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/ExternalImageAndroid.kt +++ b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/ExternalImageAndroid.kt @@ -53,6 +53,7 @@ fun File.toExternalImage(): ExternalImage { md5 = this.inputStream().use { it.md5() }, imageFormat = this.nameWithoutExtension, input = this.inputStream(), + inputSize = this.length(), filename = this.name ) } diff --git a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt index 88b572239..11990fa36 100644 --- a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt +++ b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt @@ -13,7 +13,7 @@ import android.annotation.SuppressLint import android.net.wifi.WifiManager import android.os.Build import android.telephony.TelephonyManager -import io.ktor.utils.io.core.toByteArray +import kotlinx.io.core.toByteArray import kotlinx.serialization.Serializable import kotlinx.serialization.Transient import kotlinx.serialization.UnstableDefault diff --git a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/io/PlatformDatagramChannelAndroid.kt b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/io/PlatformDatagramChannelAndroid.kt index 801a19299..ed02843f3 100644 --- a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/io/PlatformDatagramChannelAndroid.kt +++ b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/io/PlatformDatagramChannelAndroid.kt @@ -9,12 +9,12 @@ package net.mamoe.mirai.utils.io -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.Closeable -import io.ktor.utils.io.nio.readPacketAtMost -import io.ktor.utils.io.nio.writePacket import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Closeable +import kotlinx.io.nio.readPacketAtMost +import kotlinx.io.nio.writePacket import java.net.InetSocketAddress import java.nio.channels.DatagramChannel import java.nio.channels.ReadableByteChannel diff --git a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocket.kt b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocket.kt index 063565c1d..f6c1d2513 100644 --- a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocket.kt +++ b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocket.kt @@ -9,13 +9,13 @@ package net.mamoe.mirai.utils.io -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.Closeable -import io.ktor.utils.io.core.ExperimentalIoApi -import io.ktor.utils.io.streams.readPacketAtMost -import io.ktor.utils.io.streams.writePacket import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Closeable +import kotlinx.io.core.ExperimentalIoApi +import kotlinx.io.streams.readPacketAtMost +import kotlinx.io.streams.writePacket import net.mamoe.mirai.utils.MiraiInternalAPI import java.io.BufferedInputStream import java.io.BufferedOutputStream diff --git a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/platformAndroid.kt b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/platformAndroid.kt index 9adb9aa12..8430ce7e8 100644 --- a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/platformAndroid.kt +++ b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/platformAndroid.kt @@ -12,7 +12,7 @@ package net.mamoe.mirai.utils import io.ktor.client.HttpClient import io.ktor.client.engine.cio.CIO import io.ktor.util.KtorExperimentalAPI -import io.ktor.utils.io.pool.useInstance +import kotlinx.io.pool.useInstance import net.mamoe.mirai.utils.io.ByteArrayPool import java.io.ByteArrayOutputStream import java.io.DataInput diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotAccount.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotAccount.kt index b4c84333a..1f0a2ebe6 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotAccount.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotAccount.kt @@ -11,7 +11,7 @@ package net.mamoe.mirai -import io.ktor.utils.io.core.toByteArray +import kotlinx.io.core.toByteArray import net.mamoe.mirai.utils.MiraiExperimentalAPI import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.md5 diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/data/ImageLink.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/data/ImageLink.kt index 713ff08a1..3cef0c4a3 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/data/ImageLink.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/data/ImageLink.kt @@ -10,8 +10,8 @@ package net.mamoe.mirai.data import io.ktor.client.request.get -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.readBytes +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.readBytes import net.mamoe.mirai.utils.Http interface ImageLink { diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt index 64a6b9e5e..ac2c51b43 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt @@ -21,7 +21,6 @@ import net.mamoe.mirai.event.events.ImageUploadEvent.Failed import net.mamoe.mirai.event.events.ImageUploadEvent.Succeed import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.MessageChain -import net.mamoe.mirai.message.data.MessageSource import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.MiraiExperimentalAPI diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/ExternalImage.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/ExternalImage.kt index 59a07668c..b26e7163e 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/ExternalImage.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/ExternalImage.kt @@ -12,9 +12,9 @@ package net.mamoe.mirai.utils import io.ktor.utils.io.ByteReadChannel -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.Input import kotlinx.io.InputStream +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Input import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.QQ diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/channels.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/channels.kt index e2c480e16..c544f09c4 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/channels.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/channels.kt @@ -15,13 +15,10 @@ package net.mamoe.mirai.utils import io.ktor.utils.io.ByteReadChannel -import io.ktor.utils.io.ByteWriteChannel -import io.ktor.utils.io.close -import io.ktor.utils.io.core.Output -import io.ktor.utils.io.core.writeFully -import io.ktor.utils.io.pool.useInstance import io.ktor.utils.io.readAvailable import kotlinx.io.OutputStream +import kotlinx.io.core.Output +import kotlinx.io.pool.useInstance import net.mamoe.mirai.utils.io.ByteArrayPool import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmName diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/cryptor/TEA.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/cryptor/TEA.kt index 4a98d4441..3e43b3fde 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/cryptor/TEA.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/cryptor/TEA.kt @@ -9,9 +9,8 @@ package net.mamoe.mirai.utils.cryptor -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.readFully -import io.ktor.utils.io.pool.useInstance +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.pool.useInstance import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.io.ByteArrayPool import net.mamoe.mirai.utils.io.toByteArray diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/PlatformDatagramChannel.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/PlatformDatagramChannel.kt index 057670f01..9e4b98f1a 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/PlatformDatagramChannel.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/PlatformDatagramChannel.kt @@ -9,8 +9,8 @@ package net.mamoe.mirai.utils.io -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.Closeable +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Closeable import net.mamoe.mirai.utils.MiraiInternalAPI /** diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/PlatformSocket.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/PlatformSocket.kt index 24a6d7d86..70b411fae 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/PlatformSocket.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/PlatformSocket.kt @@ -9,8 +9,8 @@ package net.mamoe.mirai.utils.io -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.Closeable +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Closeable import net.mamoe.mirai.utils.MiraiInternalAPI /** diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/byteArrays.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/byteArrays.kt index 970a71a7d..6a191ce29 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/byteArrays.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/byteArrays.kt @@ -13,11 +13,11 @@ package net.mamoe.mirai.utils.io -import io.ktor.utils.io.charsets.Charset -import io.ktor.utils.io.charsets.Charsets -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.String -import io.ktor.utils.io.core.use +import kotlinx.io.charsets.Charset +import kotlinx.io.charsets.Charsets +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.String +import kotlinx.io.core.use import net.mamoe.mirai.utils.checkOffsetAndLength import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/chunked.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/chunked.kt index e9c3a0dfc..fc0b54515 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/chunked.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/chunked.kt @@ -10,16 +10,14 @@ package net.mamoe.mirai.utils.io import io.ktor.utils.io.ByteReadChannel -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.Input -import io.ktor.utils.io.core.isNotEmpty -import io.ktor.utils.io.core.readAvailable -import io.ktor.utils.io.pool.useInstance import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf import kotlinx.io.InputStream +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Input +import kotlinx.io.pool.useInstance import net.mamoe.mirai.utils.MiraiInternalAPI diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/conversion.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/conversion.kt index dfd11e4df..c47f22772 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/conversion.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/conversion.kt @@ -11,6 +11,8 @@ package net.mamoe.mirai.utils.io +import kotlinx.io.core.IoBuffer +import kotlinx.io.pool.ObjectPool import kotlin.random.Random import kotlin.random.nextInt @@ -200,3 +202,13 @@ fun ByteArray.toInt(): Int = (this[0].toInt().and(255) shl 24) + (this[1].toInt().and(255) shl 16) + (this[2].toInt().and(255) shl 8) + (this[3].toInt().and( 255 ) shl 0) + +/** + * 从 [IoBuffer.Pool] [borrow][ObjectPool.borrow] 一个 [IoBuffer] 然后将 [this] 写入. + * 注意回收 ([ObjectPool.recycle]) + */ +fun ByteArray.toIoBuffer( + offset: Int = 0, + length: Int = this.size - offset, + pool: ObjectPool = IoBuffer.Pool +): IoBuffer = pool.borrow().let { it.writeFully(this, offset, length); it } \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/output.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/output.kt index 837541e2a..671e023b3 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/output.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/output.kt @@ -13,7 +13,7 @@ package net.mamoe.mirai.utils.io -import io.ktor.utils.io.core.* +import kotlinx.io.core.* import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.coerceAtMostOrFail import net.mamoe.mirai.utils.cryptor.TEA diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/platform.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/platform.kt index cd9188012..c4b730d91 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/platform.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/platform.kt @@ -12,7 +12,7 @@ package net.mamoe.mirai.utils import io.ktor.client.HttpClient -import io.ktor.utils.io.core.toByteArray +import kotlinx.io.core.toByteArray /** * 时间戳 diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt index e36d3bd19..9e2b6c493 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt @@ -12,9 +12,9 @@ package net.mamoe.mirai.message import io.ktor.utils.io.ByteWriteChannel -import io.ktor.utils.io.core.Input +import kotlinx.io.core.Input import io.ktor.utils.io.core.Output -import io.ktor.utils.io.core.use +import kotlinx.io.core.use import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.message.data.Image diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/SendImageUtilsJvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/SendImageUtilsJvm.kt index 63e246166..a28d13071 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/SendImageUtilsJvm.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/SendImageUtilsJvm.kt @@ -11,9 +11,9 @@ package net.mamoe.mirai.message -import io.ktor.utils.io.core.Input import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import kotlinx.io.core.Input import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.OfflineImage diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/BotConfigurationJvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/BotConfigurationJvm.kt index 8f62dc5a8..3b7726efe 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/BotConfigurationJvm.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/BotConfigurationJvm.kt @@ -9,7 +9,6 @@ package net.mamoe.mirai.utils -import io.ktor.utils.io.core.use import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -21,6 +20,7 @@ import kotlinx.coroutines.io.writeFully import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext +import kotlinx.io.core.use import net.mamoe.mirai.Bot import net.mamoe.mirai.network.BotNetworkHandler import java.awt.Image diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/ExternalImageJvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/ExternalImageJvm.kt index f6b9f8441..4f500aac4 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/ExternalImageJvm.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/ExternalImageJvm.kt @@ -12,13 +12,13 @@ package net.mamoe.mirai.utils import io.ktor.utils.io.ByteReadChannel -import io.ktor.utils.io.core.Input -import io.ktor.utils.io.core.buildPacket -import io.ktor.utils.io.core.copyTo -import io.ktor.utils.io.errors.IOException -import io.ktor.utils.io.streams.asOutput import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.withContext +import kotlinx.io.core.Input +import kotlinx.io.core.buildPacket +import kotlinx.io.core.copyTo +import kotlinx.io.errors.IOException +import kotlinx.io.streams.asOutput import net.mamoe.mirai.utils.io.getRandomString import java.awt.image.BufferedImage import java.io.File diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/PlatformUtilsJvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/PlatformUtilsJvm.kt index 49472129a..46d10fe8c 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/PlatformUtilsJvm.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/PlatformUtilsJvm.kt @@ -13,7 +13,7 @@ package net.mamoe.mirai.utils import io.ktor.client.HttpClient import io.ktor.client.engine.cio.CIO -import io.ktor.utils.io.pool.useInstance +import kotlinx.io.pool.useInstance import net.mamoe.mirai.utils.io.ByteArrayPool import java.io.* import java.net.InetAddress diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt index e71cbbfdd..8bcbf6f42 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt @@ -9,7 +9,7 @@ package net.mamoe.mirai.utils -import io.ktor.utils.io.core.toByteArray +import kotlinx.io.core.toByteArray import kotlinx.serialization.Serializable import kotlinx.serialization.Transient import kotlinx.serialization.UnstableDefault diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocket.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocket.kt index 063565c1d..f6c1d2513 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocket.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocket.kt @@ -9,13 +9,13 @@ package net.mamoe.mirai.utils.io -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.Closeable -import io.ktor.utils.io.core.ExperimentalIoApi -import io.ktor.utils.io.streams.readPacketAtMost -import io.ktor.utils.io.streams.writePacket import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Closeable +import kotlinx.io.core.ExperimentalIoApi +import kotlinx.io.streams.readPacketAtMost +import kotlinx.io.streams.writePacket import net.mamoe.mirai.utils.MiraiInternalAPI import java.io.BufferedInputStream import java.io.BufferedOutputStream diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocketJvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocketJvm.kt index db26ec821..1cf48c36f 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocketJvm.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/io/PlatformSocketJvm.kt @@ -9,12 +9,12 @@ package net.mamoe.mirai.utils.io -import io.ktor.utils.io.core.ByteReadPacket -import io.ktor.utils.io.core.Closeable -import io.ktor.utils.io.nio.readPacketAtMost -import io.ktor.utils.io.nio.writePacket import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.Closeable +import kotlinx.io.nio.readPacketAtMost +import kotlinx.io.nio.writePacket import java.net.InetSocketAddress import java.nio.channels.DatagramChannel import java.nio.channels.ReadableByteChannel