From 23057b11242253ed6e4f2955f0a4884bcf27a39e Mon Sep 17 00:00:00 2001 From: Him188 Date: Tue, 26 Nov 2019 12:09:50 +0800 Subject: [PATCH] Add timeout --- .../network/protocol/tim/TIMBotNetworkHandler.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/TIMBotNetworkHandler.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/TIMBotNetworkHandler.kt index 002d8050c..fc1489b93 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/TIMBotNetworkHandler.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/TIMBotNetworkHandler.kt @@ -25,6 +25,7 @@ import net.mamoe.mirai.utils.OnlineStatus import net.mamoe.mirai.utils.io.* import kotlin.coroutines.CoroutineContext import kotlin.properties.Delegates +import kotlin.random.Random /** * 包处理协程调度器. @@ -69,10 +70,12 @@ internal class TIMBotNetworkHandler internal constructor(coroutineContext: Corou override suspend fun login(configuration: BotConfiguration): LoginResult { userContext = coroutineContext return withContext(this.coroutineContext) { - TIMProtocol.SERVER_IP.forEach { ip -> + TIMProtocol.SERVER_IP.sortedBy { Random.nextInt() }.forEach { ip -> bot.logger.info("Connecting server $ip") try { - socket = BotSocketAdapter(ip, configuration) + withTimeout(3000) { + socket = BotSocketAdapter(ip, configuration) + } } catch (e: Exception) { return@withContext LoginResult.NETWORK_UNAVAILABLE } @@ -447,6 +450,11 @@ internal class TIMBotNetworkHandler internal constructor(coroutineContext: Corou this.token00BA = packet.token00BA if (packet.transmissionCompleted) { + if (configuration.failOnCaptcha) { + loginResult.complete(LoginResult.CAPTCHA) + close() + return + } val code = configuration.captchaSolver(bot, captchaCache!!) this.captchaCache = null