From d14ed0cecd799c37a57147d7692118f6bf224088 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Thu, 29 Apr 2021 12:19:15 +0800 Subject: [PATCH] Dispatch events in Bot scope --- .../src/commonMain/kotlin/QQAndroidBot.kt | 2 +- .../network/components/PacketHandler.kt | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/QQAndroidBot.kt b/mirai-core/src/commonMain/kotlin/QQAndroidBot.kt index b381c1e9c..0584dd79e 100644 --- a/mirai-core/src/commonMain/kotlin/QQAndroidBot.kt +++ b/mirai-core/src/commonMain/kotlin/QQAndroidBot.kt @@ -139,7 +139,7 @@ internal open class QQAndroidBot constructor( set( PacketHandler, PacketHandlerChain( LoggingPacketHandlerAdapter(get(PacketLoggingStrategy), networkLogger), - EventBroadcasterPacketHandler(networkLogger), + EventBroadcasterPacketHandler(bot, networkLogger), CallPacketFactoryPacketHandler(bot) ) ) diff --git a/mirai-core/src/commonMain/kotlin/network/components/PacketHandler.kt b/mirai-core/src/commonMain/kotlin/network/components/PacketHandler.kt index 78c3c2830..38971856a 100644 --- a/mirai-core/src/commonMain/kotlin/network/components/PacketHandler.kt +++ b/mirai-core/src/commonMain/kotlin/network/components/PacketHandler.kt @@ -9,6 +9,9 @@ package net.mamoe.mirai.internal.network.components +import kotlinx.coroutines.CoroutineName +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch import net.mamoe.mirai.event.BroadcastControllable import net.mamoe.mirai.event.CancellableEvent import net.mamoe.mirai.event.Event @@ -61,6 +64,7 @@ internal class LoggingPacketHandlerAdapter( } internal class EventBroadcasterPacketHandler( + private val targetScope: CoroutineScope, private val logger: MiraiLogger, ) : PacketHandler { @@ -69,6 +73,7 @@ internal class EventBroadcasterPacketHandler( impl(data) } + private val coroutineName = CoroutineName("Mirai-EventDispatcher-${logger.identity}") private suspend fun impl(packet: Packet) { if (packet is MultiPacket<*>) { for (p in packet) { @@ -79,12 +84,14 @@ internal class EventBroadcasterPacketHandler( packet is CancellableEvent && packet.isCancelled -> return packet is BroadcastControllable && !packet.shouldBroadcast -> return packet is Event -> { - try { - packet.broadcast() - } catch (e: Throwable) { - if (logger.isEnabled) { - val msg = optimizeEventToString(packet) - logger.error(IllegalStateException("Exception while broadcasting event '$msg'", e)) + targetScope.launch(coroutineName) { + try { + packet.broadcast() + } catch (e: Throwable) { + if (logger.isEnabled) { + val msg = optimizeEventToString(packet) + logger.error(IllegalStateException("Exception while broadcasting event '$msg'", e)) + } } } }