diff --git a/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParser.kt b/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParser.kt index 39e386c..9d691d5 100644 --- a/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParser.kt +++ b/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParser.kt @@ -22,6 +22,8 @@ package org.mosad.thecitadelofricks.hsoparser +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Semaphore import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.mosad.thecitadelofricks.Lesson @@ -36,16 +38,26 @@ class TimetableParser(timetableURL: String? = null, htmlDoc: Document? = null) { private var logger: org.slf4j.Logger = LoggerFactory.getLogger(TimetableParser::class.java) private val days = arrayOf("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") + companion object { + val semaphore = Semaphore(3, 0) + } + private val htmlDoc: Document? = htmlDoc ?: if (timetableURL == null) { null } else { - try { - Jsoup.connect(timetableURL).get() - } catch (gex: Exception) { - logger.error("general TimetableParser error", gex) - null + runBlocking { + try { + // Only allow sending a limited amount of requests at the same time + semaphore.acquire() + Jsoup.connect(timetableURL).get() + } catch (gex: Exception) { + logger.error("general TimetableParser error", gex) + null + } finally { + semaphore.release() + } } }