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 af4c665df..b050db9a4 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 @@ -63,6 +63,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler private lateinit var channel: PlatformSocket private var _packetReceiverJob: Job? = null + private var heartbeatJob: Job? = null private val packetReceiveLock: Mutex = Mutex() @@ -90,11 +91,13 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler } override suspend fun relogin() { + heartbeatJob?.cancel() if (::channel.isInitialized) { if (channel.isOpen) { kotlin.runCatching { registerClientOnline() }.exceptionOrNull() ?: return + logger.info("Cannot do fast relogin. Trying slow relogin") } channel.close() } @@ -157,7 +160,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler } private suspend fun registerClientOnline() { - StatSvc.Register(bot.client).sendAndExpect<StatSvc.Register.Response>(6000) // it's slow + StatSvc.Register(bot.client).sendAndExpect<StatSvc.Register.Response>() } @UseExperimental(MiraiExperimentalAPI::class, ExperimentalTime::class) @@ -250,7 +253,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler joinAll(friendListJob, groupJob) - this@QQAndroidBotNetworkHandler.launch(CoroutineName("Heartbeat")) { + heartbeatJob = this@QQAndroidBotNetworkHandler.launch(CoroutineName("Heartbeat")) { while (this.isActive) { delay(bot.configuration.heartbeatPeriodMillis) val failException = doHeartBeat()