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