From 876da07144e834c81b4bee46d4022c0af6c95233 Mon Sep 17 00:00:00 2001 From: ryoii <ryoii@foxmail.com> Date: Sat, 22 Feb 2020 00:40:40 +0800 Subject: [PATCH] tool man fixes bugs which he doesnt know at all --- .../network/QQAndroidBotNetworkHandler.kt | 45 +++++++++---------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt index 4746a5fff..57782c6f5 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt @@ -374,12 +374,12 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler // with generic type, less mistakes private suspend fun <P : Packet?> generifiedParsePacket(input: Input) { KnownPacketFactories.parseIncomingPacket(bot, input) { packetFactory: PacketFactory<P>, packet: P, commandName: String, sequenceId: Int -> - handlePacket(packetFactory, packet, commandName, sequenceId) if (packet is MultiPacket<*>) { packet.forEach { handlePacket(null, it, commandName, sequenceId) } } + handlePacket(packetFactory, packet, commandName, sequenceId) } } @@ -388,29 +388,6 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler */ suspend fun <P : Packet?> handlePacket(packetFactory: PacketFactory<P>?, packet: P, commandName: String, sequenceId: Int) { // highest priority: pass to listeners (attached by sendAndExpect). - packetListeners.forEach { listener -> - if (listener.filter(commandName, sequenceId) && packetListeners.remove(listener)) { - listener.complete(packet) - } - } - - // check top-level cancelling - if (packet != null && PacketReceivedEvent(packet).broadcast().isCancelled) { - return - } - - - // broadcast - if (packet is Event) { - if (packet is BroadcastControllable) { - if (packet.shouldBroadcast) packet.broadcast() - } else { - packet.broadcast() - } - - if (packet is CancellableEvent && packet.isCancelled) return - } - if (packet != null && (bot.logger.isEnabled || logger.isEnabled)) { val logMessage = "Received: ${packet.toString().replace("\n", """\n""").replace("\r", "")}" @@ -419,12 +396,32 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler } else logger.verbose(logMessage) } + packetListeners.forEach { listener -> + if (listener.filter(commandName, sequenceId) && packetListeners.remove(listener)) { + listener.complete(packet) + } + } + packetFactory?.run { when (this) { is OutgoingPacketFactory<P> -> bot.handle(packet) is IncomingPacketFactory<P> -> bot.handle(packet, sequenceId)?.sendWithoutExpect() } } + + if (packet != null && PacketReceivedEvent(packet).broadcast().isCancelled) { + return + } + + if (packet is Event) { + if (packet is BroadcastControllable) { + if (packet.shouldBroadcast) packet.broadcast() + } else { + packet.broadcast() + } + + if (packet is CancellableEvent && packet.isCancelled) return + } } /**