Commit c695f2cd authored by Him188's avatar Him188

Fix #240

parent 7f347fee
......@@ -48,11 +48,8 @@ import net.mamoe.mirai.qqandroid.network.highway.HighwayHelper
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.LongMsg
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.*
import net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList
import net.mamoe.mirai.qqandroid.utils.MiraiPlatformUtils
import net.mamoe.mirai.qqandroid.utils.encodeToString
import net.mamoe.mirai.qqandroid.utils.*
import net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
import net.mamoe.mirai.qqandroid.utils.toIpV4AddressString
import net.mamoe.mirai.qqandroid.utils.toReadPacket
import net.mamoe.mirai.utils.*
import kotlin.collections.asSequence
import kotlin.contracts.ExperimentalContracts
......@@ -604,7 +601,10 @@ internal abstract class QQAndroidBotBase constructor(
)
).toByteArray(LongMsg.ReqBody.serializer())
var exception: Throwable? = null
val success = response.proto.uint32UpIp.zip(response.proto.uint32UpPort).any { (ip, port) ->
kotlin.runCatching {
withTimeoutOrNull((body.size * 1000L / 1024 / 10).coerceAtLeast(5000L)) {
network.logger.verbose { "[Highway] Uploading group long message#$sequenceId to ${ip.toIpV4AddressString()}:$port: size=${body.size}" }
HighwayHelper.uploadImage(
......@@ -623,9 +623,17 @@ internal abstract class QQAndroidBotBase constructor(
network.logger.verbose { "[Highway] Uploading group long message: timeout, retrying next server" }
false
}
}.getOrElse {
exception?.addSuppressedMirai(it)
exception = it
false
}
}
check(success) { "cannot upload group image, failed on all servers." }
if (!success) {
throw IllegalStateException("cannot upload group long message, failed on all servers.",
exception)
}
}
}
......
......@@ -33,6 +33,7 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image.ImgStore
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvc
import net.mamoe.mirai.qqandroid.network.protocol.packet.list.ProfileService
import net.mamoe.mirai.qqandroid.utils.addSuppressedMirai
import net.mamoe.mirai.qqandroid.utils.estimateLength
import net.mamoe.mirai.qqandroid.utils.toIpV4AddressString
import net.mamoe.mirai.utils.*
......@@ -393,7 +394,9 @@ internal class GroupImpl(
}
is ImgStore.GroupPicUp.Response.RequireUpload -> {
// 每 10KB 等 1 秒, 最少等待 5 秒
var exception: Throwable? = null
val success = response.uploadIpList.zip(response.uploadPortList).any { (ip, port) ->
kotlin.runCatching {
withTimeoutOrNull((image.inputSize * 1000 / 1024 / 10).coerceAtLeast(5000)) {
bot.network.logger.verbose { "[Highway] Uploading group image to ${ip.toIpV4AddressString()}:$port, size=${image.inputSize / 1024} KiB" }
......@@ -415,9 +418,16 @@ internal class GroupImpl(
bot.network.logger.verbose { "[Highway] Uploading group image: timeout, retrying next server" }
false
}
}.getOrElse {
exception?.addSuppressedMirai(it)
exception = it
false
}
}
check(success) { "cannot upload group image, failed on all servers." }
if (!success) {
throw IllegalStateException("cannot upload group image, failed on all servers.", exception)
}
val resourceId = image.calculateImageResourceId()
// return NotOnlineImageFromFile(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment