mirror of
https://github.com/devproje/px32-bot.git
synced 2024-11-26 10:43:05 +00:00
feat: async task container - not worked
This commit is contained in:
parent
8c9b4a1112
commit
867a7c4ff7
2 changed files with 74 additions and 0 deletions
|
@ -0,0 +1,70 @@
|
|||
package net.projecttl.p.x32.api.util
|
||||
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
|
||||
/*
|
||||
* This class only support by kotlin
|
||||
* This feature is Experimental
|
||||
*/
|
||||
class AsyncTask(val loop: Boolean = true, val block: suspend () -> Unit) {
|
||||
private val memLock = Mutex()
|
||||
var isActive = true
|
||||
private set
|
||||
|
||||
suspend fun run() {
|
||||
do {
|
||||
if (memLock.isLocked) {
|
||||
if (!isActive) {
|
||||
break
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
block.invoke()
|
||||
} while (loop)
|
||||
}
|
||||
|
||||
suspend fun kill() {
|
||||
memLock.lock()
|
||||
isActive = false
|
||||
|
||||
memLock.unlock()
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This class only support by kotlin
|
||||
* This feature is Experimental
|
||||
*/
|
||||
class AsyncTaskContainer {
|
||||
private val tasks = mutableMapOf<Long, AsyncTask>()
|
||||
private var tid = 0L
|
||||
|
||||
fun getTask(tid: Long): AsyncTask? {
|
||||
return tasks[tid]
|
||||
}
|
||||
|
||||
fun createTask(task: AsyncTask) {
|
||||
tasks[tid] = task
|
||||
println("created task with id: $tid")
|
||||
|
||||
tid++
|
||||
}
|
||||
|
||||
suspend fun removeTask(tid: Long) {
|
||||
val task = getTask(tid) ?: throw NullPointerException("task $tid is missing or not defined")
|
||||
task.kill()
|
||||
|
||||
tasks.remove(tid)
|
||||
println("removed task with id: $tid")
|
||||
}
|
||||
|
||||
suspend fun killAll() {
|
||||
tasks.forEach { (k, t) ->
|
||||
t.kill()
|
||||
tasks.remove(k)
|
||||
println("removed task with id: $tid")
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
package net.projecttl.p.x32.kernel
|
||||
|
||||
object TaskManager {
|
||||
}
|
Loading…
Reference in a new issue