Files
AAS_NewGeneration/src/Main.kt
2025-09-02 12:34:15 +07:00

92 lines
3.8 KiB
Kotlin

import audio.AudioPlayer
import com.sun.jna.Platform
import content.ContentCache
import database.MariaDB
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import org.tinylog.Logger
import oshi.util.GlobalConfig
import web.WebApp
fun main() {
if (Platform.isWindows()) {
// supaya OSHI bisa mendapatkan CPU usage di Windows seperti di Task Manager
GlobalConfig.set(GlobalConfig.OSHI_OS_WINDOWS_CPU_UTILITY, true)
}
Logger.info("Application started" as Any)
val audioPlayer = AudioPlayer(44100) // 44100 Hz sampling rate
audioPlayer.InitAudio(1)
val content = ContentCache()
val db = MariaDB()
CoroutineScope(Dispatchers.Default).launch {
while (isActive) {
delay(1000)
val broadcastzones = db.GetBroadcastZones()
// baca dulu queue paging, prioritas 1
db.Read_Queue_Paging().forEach {
// cek apakah queue paging ada broadcast zone nya
if (it.BroadcastZones.isNotBlank()) {
val zz = it.BroadcastZones.split(";")
// cek apakah semua target broadcast zone dari queue paging ada di dalam database broadcast zones
if (zz.all { z -> broadcastzones.any { bz -> bz.equals(z) } }) {
// semua target broadcast zone valid, sekarang cek apakah semua target broadcast zone idle
} else {
// ada broadcast zone yang tidak valid, delete from queue paging
db.Delete_Queue_Paging_by_index(it.index)
//TODO check log message yang benar
db.Add_Log(
"AAS",
"Cancelled paging message with index ${it.index} due to invalid broadcast zone"
)
}
} else {
// invalid broadcast zone, delete from queue paging
db.Delete_Queue_Paging_by_index(it.index)
// TODO check log message yang benar
db.Add_Log("AAS", "Cancelled paging message with index ${it.index} due to empty broadcast zone")
}
}
// baca kemudian queue table, prioritas 2
db.Read_Queue_Table().forEach {
if (it.BroadcastZones.isNotBlank()) {
val zz = it.BroadcastZones.split(";")
// cek apakah semua target broadcast zone dari queue table ada di dalam database broadcast zones
if (zz.all { z -> broadcastzones.any { bz -> bz.equals(z) } }) {
// semua target broadcast zone valid, sekarang cek apakah semua target broadcast zone idle
} else {
// ada broadcast zone yang tidak valid, delete from queue table
db.Delete_Queue_Table_by_index(it.index)
//TODO check log message yang benar
db.Add_Log(
"AAS",
"Cancelled table message with index ${it.index} due to invalid broadcast zone"
)
}
} else {
// invalid broadcast zone, delete from queue table
db.Delete_Queue_Table_by_index(it.index)
// TODO check log message yang benar
db.Add_Log("AAS", "Cancelled table message with index ${it.index} due to empty broadcast zone")
}
}
}
}
val web = WebApp(
3030,
listOf(
Pair("admin", "password"),
Pair("user", "password")
), db
)
web.Start()
}