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
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!!
|
|
}
|
|
} |