Commit 12c38b94 authored by Him188's avatar Him188

Fix IllegalStateException when losing packet

parent 7172ef62
...@@ -531,34 +531,39 @@ internal class QQAndroidBotNetworkHandler(coroutineContext: CoroutineContext, bo ...@@ -531,34 +531,39 @@ internal class QQAndroidBotNetworkHandler(coroutineContext: CoroutineContext, bo
val cache = cachedPacket.value val cache = cachedPacket.value
if (cache == null) { if (cache == null) {
// 没有缓存 kotlin.runCatching {
var length: Int = rawInput.readInt() - 4 // 没有缓存
if (rawInput.remaining == length.toLong()) { var length: Int = rawInput.readInt() - 4
// 捷径: 当包长度正好, 直接传递剩余数据. if (rawInput.remaining == length.toLong()) {
cachedPacketTimeoutJob?.cancel() // 捷径: 当包长度正好, 直接传递剩余数据.
parsePacketAsync(rawInput) cachedPacketTimeoutJob?.cancel()
return parsePacketAsync(rawInput)
} return
// 循环所有完整的包 }
while (rawInput.remaining >= length) { // 循环所有完整的包
parsePacketAsync(rawInput.readPacketExact(length)) while (rawInput.remaining >= length) {
parsePacketAsync(rawInput.readPacketExact(length))
if (rawInput.remaining == 0L) {
cachedPacket.value = null // 表示包长度正好
cachedPacketTimeoutJob?.cancel()
return
}
length = rawInput.readInt() - 4
}
if (rawInput.remaining == 0L) { if (rawInput.remaining != 0L) {
// 剩余的包长度不够, 缓存后接收下一个包
expectingRemainingLength = length - rawInput.remaining
cachedPacket.value = rawInput
} else {
cachedPacket.value = null // 表示包长度正好 cachedPacket.value = null // 表示包长度正好
cachedPacketTimeoutJob?.cancel() cachedPacketTimeoutJob?.cancel()
return return
} }
length = rawInput.readInt() - 4 }.getOrElse {
} cachedPacket.value = null
if (rawInput.remaining != 0L) {
// 剩余的包长度不够, 缓存后接收下一个包
expectingRemainingLength = length - rawInput.remaining
cachedPacket.value = rawInput
} else {
cachedPacket.value = null // 表示包长度正好
cachedPacketTimeoutJob?.cancel() cachedPacketTimeoutJob?.cancel()
return
} }
} else { } else {
// 有缓存 // 有缓存
......
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