Dev #8

Merged
altavir merged 78 commits from dev into master 2023-03-04 16:47:55 +03:00
2 changed files with 5 additions and 8 deletions
Showing only changes of commit f880b2d637 - Show all commits

View File

@ -10,6 +10,7 @@ dependencies {
implementation(projects.magix.magixApi)
implementation(projects.controlsMagixClient)
implementation(projects.magix.magixServer)
implementation(projects.xodusSerialization)
implementation("org.jetbrains.xodus:xodus-entity-store:$xodusVersion")
implementation("org.jetbrains.xodus:xodus-environment:$xodusVersion")
implementation("org.jetbrains.xodus:xodus-vfs:$xodusVersion")

View File

@ -12,6 +12,7 @@ import ru.mipt.npm.controls.api.PropertyChangedMessage
import ru.mipt.npm.controls.controllers.DeviceManager
import ru.mipt.npm.controls.controllers.hubMessageFlow
import ru.mipt.npm.magix.server.GenericMagixMessage
import ru.mipt.npm.xodus.serialization.json.encodeToEntity
import space.kscience.dataforge.context.Context
import space.kscience.dataforge.context.Factory
import space.kscience.dataforge.context.debug
@ -36,15 +37,13 @@ public object EntityStoreFactory : Factory<PersistentEntityStore> {
@OptIn(InternalCoroutinesApi::class)
public fun DeviceManager.connectXodus(
factory: Factory<PersistentEntityStore>,
filterCondition: suspend (DeviceMessage) -> Boolean = { it is PropertyChangedMessage }
filterCondition: suspend (DeviceMessage) -> Boolean = { true }
): Job {
val entityStore = factory.invoke(meta, context)
logger.debug { "Device entity store opened" }
return hubMessageFlow(context).filter(filterCondition).onEach { message ->
entityStore.executeInTransaction {
(message as PropertyChangedMessage).toEntity(it)
}
entityStore.encodeToEntity(message, "DeviceMessage")
}.launchIn(context).apply {
invokeOnCompletion(onCancelling = true) {
entityStore.close()
@ -78,10 +77,7 @@ public fun SharedFlow<GenericMagixMessage>.storeInXodus(
flowFilter: suspend (GenericMagixMessage) -> Boolean = { true },
){
filter(flowFilter).onEach { message ->
entityStore.executeInTransaction { txn ->
val entity = txn.newEntity("MagixMessage")
entity.setProperty("value", message.toString())
}
entityStore.encodeToEntity(message, "MagixMessage")
}
}