You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.5 KiB
Kotlin

package me.eater.hefbrug.executor
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import me.eater.hefbrug.access.AccessSkeleton
import me.eater.hefbrug.access.NoopAccess
import me.eater.hefbrug.access.Wrapper
import me.eater.hefbrug.node.Node
import me.eater.hefbrug.platform_utils.`package`.PackageManager
import me.eater.hefbrug.platform_utils.service.ServiceManager
class ExecutionContext(access: AccessSkeleton, val node: Node, val noop: Boolean = true) {
private var packageManager: PackageManager? = null
private var packageManagerLock = Mutex()
private var serviceManager: ServiceManager? = null
private var serviceManagerLock = Mutex()
val roAccess: AccessSkeleton = Wrapper(access, false)
val rwAccess: AccessSkeleton = Wrapper(if (noop) NoopAccess() else access)
suspend fun getPackageManager(): PackageManager {
if (packageManager == null) {
packageManagerLock.withLock {
if (packageManager == null) {
packageManager = PackageManager.getManager(this@ExecutionContext)
}
}
}
return packageManager!!
}
suspend fun getServiceManager(): ServiceManager {
if (serviceManager == null) {
serviceManagerLock.withLock {
if (serviceManager == null) {
serviceManager = ServiceManager.getManager(this)
}
}
}
return serviceManager!!
}
}