92 lines
3.8 KiB
Kotlin
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()
|
|
|
|
|
|
}
|