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() }