diff --git a/mirai-core-api/src/commonMain/kotlin/IMirai.kt b/mirai-core-api/src/commonMain/kotlin/IMirai.kt index 42c12c63f..1ee4bd431 100644 --- a/mirai-core-api/src/commonMain/kotlin/IMirai.kt +++ b/mirai-core-api/src/commonMain/kotlin/IMirai.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019-2020 Mamoe Technologies and contributors. + * Copyright 2019-2021 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. @@ -13,6 +13,7 @@ package net.mamoe.mirai +import io.ktor.client.* import net.mamoe.kjbb.JvmBlockingBridge import net.mamoe.mirai.contact.* import net.mamoe.mirai.event.events.BotInvitedJoinGroupRequestEvent @@ -55,6 +56,10 @@ public interface IMirai : LowLevelApiAccessor { @MiraiExperimentalApi public var FileCacheStrategy: FileCacheStrategy + @Suppress("PropertyName") + @MiraiInternalApi + public val Http: HttpClient + /** * 使用 groupCode 计算 groupUin. 这两个值仅在 mirai 内部协议区分, 一般人使用时无需在意. */ diff --git a/mirai-core-utils/src/commonMain/kotlin/MiraiPlatformUtils.kt b/mirai-core-utils/src/commonMain/kotlin/MiraiPlatformUtils.kt index a2a36b0c9..aac85c498 100644 --- a/mirai-core-utils/src/commonMain/kotlin/MiraiPlatformUtils.kt +++ b/mirai-core-utils/src/commonMain/kotlin/MiraiPlatformUtils.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019-2020 Mamoe Technologies and contributors. + * Copyright 2019-2021 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. @@ -13,6 +13,7 @@ package net.mamoe.mirai.utils import io.ktor.client.* +import io.ktor.client.features.* import kotlinx.io.core.Input import kotlinx.io.core.readAvailable import java.io.* @@ -25,13 +26,6 @@ import java.util.zip.Inflater import kotlin.contracts.InvocationKind import kotlin.contracts.contract -public object MiraiPlatformUtils { - /** - * Ktor HttpClient. 不同平台使用不同引擎. - */ - public val Http: HttpClient = HttpClient() -} - @JvmOverloads public fun ByteArray.unzip(offset: Int = 0, length: Int = size - offset): ByteArray { checkOffsetAndLength(offset, length) diff --git a/mirai-core/src/commonMain/kotlin/MiraiImpl.kt b/mirai-core/src/commonMain/kotlin/MiraiImpl.kt index ec0c063b2..df60708f6 100644 --- a/mirai-core/src/commonMain/kotlin/MiraiImpl.kt +++ b/mirai-core/src/commonMain/kotlin/MiraiImpl.kt @@ -10,6 +10,8 @@ package net.mamoe.mirai.internal import io.ktor.client.* +import io.ktor.client.engine.okhttp.* +import io.ktor.client.features.* import io.ktor.client.request.* import io.ktor.client.request.forms.* import kotlinx.coroutines.SupervisorJob @@ -68,6 +70,14 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor { override var FileCacheStrategy: FileCacheStrategy = net.mamoe.mirai.utils.FileCacheStrategy.PlatformDefault + override val Http: HttpClient = HttpClient(OkHttp) { + install(HttpTimeout) { + this.requestTimeoutMillis = 30_0000 + this.connectTimeoutMillis = 30_0000 + this.socketTimeoutMillis = 30_0000 + } + } + @OptIn(LowLevelApi::class) override suspend fun acceptNewFriendRequest(event: NewFriendRequestEvent) { @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") @@ -404,7 +414,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor { amount: Int ): GroupAnnouncementList = bot.asQQAndroidBot().run { val rep = bot.asQQAndroidBot().network.run { - MiraiPlatformUtils.Http.post { + Mirai.Http.post { url("https://web.qun.qq.com/cgi-bin/announce/list_announce") body = MultiPartFormDataContent(formData { append("qid", groupId) @@ -432,7 +442,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor { override suspend fun _lowLevelSendAnnouncement(bot: Bot, groupId: Long, announcement: GroupAnnouncement): String = bot.asQQAndroidBot().run { val rep = withContext(network.coroutineContext) { - MiraiPlatformUtils.Http.post { + Mirai.Http.post { url("https://web.qun.qq.com/cgi-bin/announce/add_qun_notice") body = MultiPartFormDataContent(formData { append("qid", groupId) @@ -468,7 +478,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor { @MiraiExperimentalApi override suspend fun _lowLevelDeleteAnnouncement(bot: Bot, groupId: Long, fid: String) = bot.asQQAndroidBot().run { val data = withContext(network.coroutineContext) { - MiraiPlatformUtils.Http.post { + Mirai.Http.post { url("https://web.qun.qq.com/cgi-bin/announce/del_feed") body = MultiPartFormDataContent(formData { append("qid", groupId) @@ -498,7 +508,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor { override suspend fun _lowLevelGetAnnouncement(bot: Bot, groupId: Long, fid: String): GroupAnnouncement = bot.asQQAndroidBot().run { val rep = network.run { - MiraiPlatformUtils.Http.post { + Mirai.Http.post { url("https://web.qun.qq.com/cgi-bin/announce/get_feed") body = MultiPartFormDataContent(formData { append("qid", groupId) @@ -525,7 +535,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor { override suspend fun _lowLevelGetGroupActiveData(bot: Bot, groupId: Long, page: Int): GroupActiveData = bot.asQQAndroidBot().run { val rep = network.run { - MiraiPlatformUtils.Http.get { + Mirai.Http.get { url("https://qqweb.qq.com/c/activedata/get_mygroup_data") parameter("bkn", bkn) parameter("gc", groupId) @@ -551,7 +561,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor { type: GroupHonorType ): GroupHonorListData? = bot.asQQAndroidBot().run { val rep = network.run { - MiraiPlatformUtils.Http.get { + Mirai.Http.get { url("https://qun.qq.com/interactive/honorlist") parameter("gc", groupId) parameter("type", type.value) @@ -781,7 +791,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor { seconds: Int ) { bot as QQAndroidBot - val response = MiraiPlatformUtils.Http.post { + val response = Mirai.Http.post { url("https://qqweb.qq.com/c/anonymoustalk/blacklist") body = MultiPartFormDataContent(formData { append("anony_id", anonymousId) diff --git a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt index 4d869528f..6809255d1 100644 --- a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt +++ b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019-2020 Mamoe Technologies and contributors. + * Copyright 2019-2021 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. @@ -10,6 +10,7 @@ package net.mamoe.mirai.internal.contact import net.mamoe.mirai.Bot +import net.mamoe.mirai.Mirai import net.mamoe.mirai.contact.Friend import net.mamoe.mirai.contact.Member import net.mamoe.mirai.contact.Stranger @@ -26,7 +27,6 @@ import net.mamoe.mirai.internal.network.protocol.data.proto.Cmd0x352 import net.mamoe.mirai.internal.network.protocol.packet.chat.image.LongConn import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.utils.ExternalResource -import net.mamoe.mirai.utils.MiraiPlatformUtils import net.mamoe.mirai.utils.toUHexString import net.mamoe.mirai.utils.verbose import kotlin.coroutines.CoroutineContext @@ -81,7 +81,7 @@ internal abstract class AbstractUser( } val time = measureTime { - MiraiPlatformUtils.Http.postImage( + Mirai.Http.postImage( "0x6ff0070", bot.id, null, diff --git a/mirai-core/src/commonMain/kotlin/network/highway/HighwayHelper.kt b/mirai-core/src/commonMain/kotlin/network/highway/HighwayHelper.kt index a2e91f4d2..46161c649 100644 --- a/mirai-core/src/commonMain/kotlin/network/highway/HighwayHelper.kt +++ b/mirai-core/src/commonMain/kotlin/network/highway/HighwayHelper.kt @@ -20,6 +20,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.withTimeoutOrNull import kotlinx.io.core.* +import net.mamoe.mirai.Mirai import net.mamoe.mirai.internal.QQAndroidBot import net.mamoe.mirai.internal.network.QQAndroidClient import net.mamoe.mirai.internal.network.protocol.data.proto.CSDataHighwayHead @@ -199,7 +200,7 @@ internal object HighwayHelper { uKey: ByteArray, fileKey: ByteArray, ) { - MiraiPlatformUtils.Http.post { + Mirai.Http.post { url("http://$serverIp:$serverPort") parameter("ver", 4679) parameter("ukey", uKey.toUHexString(""))