Commit 7820b43f authored by Him188's avatar Him188

Review: ensure reentrant, rearrange coroutine job management

parent 789317fb
......@@ -180,6 +180,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
// caches
private val _pendingEnabled = atomic(true)
internal val pendingEnabled get() = _pendingEnabled.value
@Volatile
internal var pendingIncomingPackets: LockFreeLinkedList<KnownPacketFactories.IncomingPacket<*>>? =
LockFreeLinkedList()
......@@ -191,7 +192,13 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
bot.friends.delegate.clear()
bot.groups.delegate.clear()
val friendListJob = launch {
if (!pendingEnabled) {
pendingIncomingPackets = LockFreeLinkedList()
_pendingEnabled.value = true
}
coroutineScope {
launch {
lateinit var loadFriends: suspend () -> Unit
// 不要用 fun, 不要 join declaration, 不要用 val, 编译失败警告
loadFriends = suspend loadFriends@{
......@@ -239,7 +246,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
loadFriends()
}
val groupJob = launch {
launch {
try {
logger.info("开始加载群组列表与群成员列表")
val troopListData = FriendList.GetTroopListSimplify(bot.client)
......@@ -301,8 +308,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
logger.error(e)
}
}
joinAll(friendListJob, groupJob)
}
withTimeoutOrNull(5000) {
lateinit var listener: Listener<PacketReceivedEvent>
......
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