Dev #8
@ -1,16 +0,0 @@
|
||||
package ru.mipt.npm.controls.client
|
||||
|
||||
///**
|
||||
// * Communicate with server in [Magix format](https://github.com/waltz-controls/rfc/tree/master/1) and dump messages at xodus entity store
|
||||
// */
|
||||
//public fun DeviceManager.connectToMagix(
|
||||
// endpoint: MagixEndpoint<DeviceMessage>,
|
||||
// endpointID: String = DATAFORGE_MAGIX_FORMAT,
|
||||
// entityStore: PersistentEntityStore
|
||||
//): Job = connectToMagix(endpoint, endpointID) { message ->
|
||||
// if (message.payload is PropertyChangedMessage) {
|
||||
// entityStore.executeInTransaction {
|
||||
// message.toEntity(it)
|
||||
// }
|
||||
// }
|
||||
//}
|
@ -8,6 +8,7 @@ val xodusVersion = "1.3.232"
|
||||
dependencies {
|
||||
implementation(projects.controlsCore)
|
||||
implementation(projects.magix.magixApi)
|
||||
implementation(projects.controlsMagixClient)
|
||||
implementation("org.jetbrains.xodus:xodus-entity-store:$xodusVersion")
|
||||
implementation("org.jetbrains.xodus:xodus-environment:$xodusVersion")
|
||||
implementation("org.jetbrains.xodus:xodus-vfs:$xodusVersion")
|
||||
|
@ -16,18 +16,7 @@ import space.kscience.dataforge.values.ValueType
|
||||
public fun PropertyChangedMessage.toEntity(transaction: StoreTransaction): Entity {
|
||||
val entity = transaction.newEntity("PropertyChangedMessage")
|
||||
entity.setProperty("property", property)
|
||||
if (value.isLeaf) {
|
||||
val v: Value = value.value ?: TODO()
|
||||
when(v.type){
|
||||
ValueType.NULL -> TODO()
|
||||
ValueType.LIST -> TODO()
|
||||
ValueType.NUMBER -> TODO()
|
||||
ValueType.STRING -> TODO()
|
||||
ValueType.BOOLEAN -> TODO()
|
||||
}
|
||||
} else {
|
||||
entity.setProperty("value", value.toString())
|
||||
}
|
||||
entity.setProperty("value", value.toString())
|
||||
entity.setProperty("sourceDevice", sourceDevice.toString())
|
||||
targetDevice?.let { entity.setProperty("targetDevice", it.toString()) }
|
||||
comment?.let { entity.setProperty("comment", it) }
|
||||
|
@ -2,8 +2,10 @@ package ru.mipt.npm.controls.xodus
|
||||
|
||||
import jetbrains.exodus.entitystore.PersistentEntityStore
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import ru.mipt.npm.controls.api.DeviceMessage
|
||||
import ru.mipt.npm.controls.api.PropertyChangedMessage
|
||||
import ru.mipt.npm.controls.controllers.DeviceManager
|
||||
import ru.mipt.npm.controls.controllers.hubMessageFlow
|
||||
@ -11,11 +13,9 @@ import ru.mipt.npm.controls.controllers.hubMessageFlow
|
||||
|
||||
public fun DeviceManager.connectXodus(
|
||||
entityStore: PersistentEntityStore,
|
||||
//filter: (DeviceMessage) -> Boolean = {it is PropertyChangedMessage}
|
||||
): Job = hubMessageFlow(context).onEach { message ->
|
||||
if (message is PropertyChangedMessage) {
|
||||
entityStore.executeInTransaction {
|
||||
message.toEntity(it)
|
||||
}
|
||||
filterCondition: suspend (DeviceMessage) -> Boolean = { it is PropertyChangedMessage }
|
||||
): Job = hubMessageFlow(context).filter(filterCondition).onEach { message ->
|
||||
entityStore.executeInTransaction {
|
||||
(message as PropertyChangedMessage).toEntity(it)
|
||||
}
|
||||
}.launchIn(context)
|
Loading…
Reference in New Issue
Block a user