From c528448b5e8acc685d9c211b854f2ea2c527f72e Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Sun, 20 Jul 2025 23:04:24 +0900 Subject: [PATCH] [feature] StreamInfo Thread sleep time added. --- .../mori/chzzk_bot/chatbot/chzzk/ChzzkHandler.kt | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/ChzzkHandler.kt b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/ChzzkHandler.kt index 9cb2311..8dbce09 100644 --- a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/ChzzkHandler.kt +++ b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/ChzzkHandler.kt @@ -28,6 +28,7 @@ import java.lang.Thread import java.net.SocketTimeoutException import java.nio.charset.Charset import java.time.LocalDateTime +import java.util.concurrent.ConcurrentHashMap object ChzzkHandler { private val handlers = mutableListOf() @@ -36,6 +37,9 @@ object ChzzkHandler { @Volatile private var running: Boolean = false private val dispatcher: CoroutinesEventBus by inject(CoroutinesEventBus::class.java) + private val lastRunMap = ConcurrentHashMap() + private val requiredWait = 210_000L + fun addUser(chzzkChannel: ChzzkChannel, user: User) { handlers.add(UserHandler(chzzkChannel, logger, user, streamStartTime = LocalDateTime.now())) } @@ -128,6 +132,7 @@ object ChzzkHandler { } catch (e: Exception) { logger.info("Thread 1 Exception: ${it.channel.channelName} / ${e.stackTraceToString()}") } finally { + lastRunMap[it.channel.channelId] = System.currentTimeMillis() Thread.sleep(5000) } } @@ -136,12 +141,21 @@ object ChzzkHandler { } val threadRunner2 = Runnable { - logger.info("Thread 2 started!") logger.info("Thread 2 started!") while (running) { handlers.forEach { if (!running) return@forEach try { + val now = System.currentTimeMillis() + val lastRun = lastRunMap[it.channel.channelId] ?: 0L + val waitedTime = now - lastRun + + if(waitedTime < requiredWait) { + val sleepTime = requiredWait - waitedTime + logger.info("Thread 2 Sleep: ${it.channel.channelName} / ${sleepTime}ms") + Thread.sleep(sleepTime) + } + val streamInfo = Connector.getLive(it.channel.channelId) if (streamInfo?.isOnline == true && !it.isActive) { try {