mirror of
https://github.com/openflocon/Flocon.git
synced 2026-05-08 07:37:00 +00:00
refact: [DASHBOARD] removed java code (#367)
Co-authored-by: Florent Champigny <florent@bere.al>
This commit is contained in:
parent
6c822dc26b
commit
feb441bf48
3 changed files with 56 additions and 45 deletions
|
|
@ -11,46 +11,54 @@ import io.github.openflocon.flocon.plugins.dashboard.model.DashboardConfig
|
|||
import io.github.openflocon.flocon.plugins.dashboard.model.todevice.ToDeviceCheckBoxValueChangedMessage
|
||||
import io.github.openflocon.flocon.plugins.dashboard.model.todevice.ToDeviceSubmittedFormMessage
|
||||
import io.github.openflocon.flocon.plugins.dashboard.model.todevice.ToDeviceSubmittedTextFieldMessage
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
internal class FloconDashboardPluginImpl(
|
||||
private val sender: FloconMessageSender,
|
||||
) : FloconPlugin, FloconDashboardPlugin {
|
||||
|
||||
private val dashboards = ConcurrentHashMap<String, DashboardConfig>()
|
||||
private val callbackMap: MutableMap<String, DashboardCallback> = ConcurrentHashMap()
|
||||
private val DashboardDispatcher = Dispatchers.Default.limitedParallelism(1)
|
||||
|
||||
private val scope = CoroutineScope(DashboardDispatcher + SupervisorJob())
|
||||
|
||||
private val dashboards = mutableMapOf<String, DashboardConfig>()
|
||||
private val callbackMap = mutableMapOf<String, DashboardCallback>()
|
||||
|
||||
override fun onMessageReceived(
|
||||
messageFromServer: FloconMessageFromServer,
|
||||
) {
|
||||
when (messageFromServer.method) {
|
||||
Protocol.ToDevice.Dashboard.Method.OnClick -> {
|
||||
val id = messageFromServer.body
|
||||
|
||||
callbackMap[id]?.let { it as? DashboardCallback.ButtonCallback }?.action?.invoke()
|
||||
}
|
||||
|
||||
Protocol.ToDevice.Dashboard.Method.OnFormSubmitted -> {
|
||||
ToDeviceSubmittedFormMessage.fromJson(messageFromServer.body)?.let {
|
||||
callbackMap[it.id]?.let { it as? DashboardCallback.FormCallback }?.actions?.invoke(
|
||||
it.values
|
||||
)
|
||||
scope.launch {
|
||||
when (messageFromServer.method) {
|
||||
Protocol.ToDevice.Dashboard.Method.OnClick -> {
|
||||
val id = messageFromServer.body
|
||||
callbackMap[id]?.let { it as? DashboardCallback.ButtonCallback }?.action?.invoke()
|
||||
}
|
||||
}
|
||||
|
||||
Protocol.ToDevice.Dashboard.Method.OnTextFieldSubmitted -> {
|
||||
ToDeviceSubmittedTextFieldMessage.fromJson(messageFromServer.body)?.let {
|
||||
callbackMap[it.id]?.let { it as? DashboardCallback.TextFieldCallback }?.action?.invoke(
|
||||
it.value
|
||||
)
|
||||
Protocol.ToDevice.Dashboard.Method.OnFormSubmitted -> {
|
||||
ToDeviceSubmittedFormMessage.fromJson(messageFromServer.body)?.let {
|
||||
callbackMap[it.id]?.let { it as? DashboardCallback.FormCallback }?.actions?.invoke(
|
||||
it.values
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Protocol.ToDevice.Dashboard.Method.OnCheckBoxValueChanged -> {
|
||||
ToDeviceCheckBoxValueChangedMessage.fromJson(messageFromServer.body)?.let {
|
||||
callbackMap[it.id]?.let { it as? DashboardCallback.CheckBoxCallback }?.action?.invoke(
|
||||
it.value
|
||||
)
|
||||
Protocol.ToDevice.Dashboard.Method.OnTextFieldSubmitted -> {
|
||||
ToDeviceSubmittedTextFieldMessage.fromJson(messageFromServer.body)?.let {
|
||||
callbackMap[it.id]?.let { it as? DashboardCallback.TextFieldCallback }?.action?.invoke(
|
||||
it.value
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Protocol.ToDevice.Dashboard.Method.OnCheckBoxValueChanged -> {
|
||||
ToDeviceCheckBoxValueChangedMessage.fromJson(messageFromServer.body)?.let {
|
||||
callbackMap[it.id]?.let { it as? DashboardCallback.CheckBoxCallback }?.action?.invoke(
|
||||
it.value
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -59,27 +67,33 @@ internal class FloconDashboardPluginImpl(
|
|||
override fun onConnectedToServer() {
|
||||
// on connected, send known dashboards
|
||||
dashboards.values.takeIf { it.isNotEmpty() }?.forEach { dashboardConfig ->
|
||||
registerDashboard(dashboardConfig)
|
||||
registerDashboardInternal(dashboardConfig)
|
||||
}
|
||||
}
|
||||
|
||||
override fun registerDashboard(dashboardConfig: DashboardConfig) {
|
||||
val dashboardJson = dashboardConfig.toJson(
|
||||
registerCallback = { callback ->
|
||||
callbackMap[callback.id] = callback
|
||||
},
|
||||
)
|
||||
registerDashboardInternal(dashboardConfig)
|
||||
}
|
||||
|
||||
dashboards.put(dashboardConfig.id, dashboardConfig)
|
||||
|
||||
try {
|
||||
sender.send(
|
||||
plugin = Protocol.FromDevice.Dashboard.Plugin,
|
||||
method = Protocol.FromDevice.Dashboard.Method.Update,
|
||||
body = dashboardJson.toString()
|
||||
private fun registerDashboardInternal(dashboardConfig: DashboardConfig) {
|
||||
scope.launch {
|
||||
val dashboardJson = dashboardConfig.toJson(
|
||||
registerCallback = { callback ->
|
||||
callbackMap[callback.id] = callback
|
||||
},
|
||||
)
|
||||
} catch (t: Throwable) {
|
||||
FloconLogger.logError("dashboard error", t)
|
||||
|
||||
dashboards.put(dashboardConfig.id, dashboardConfig)
|
||||
|
||||
try {
|
||||
sender.send(
|
||||
plugin = Protocol.FromDevice.Dashboard.Plugin,
|
||||
method = Protocol.FromDevice.Dashboard.Method.Update,
|
||||
body = dashboardJson.toString()
|
||||
)
|
||||
} catch (t: Throwable) {
|
||||
FloconLogger.logError("dashboard error", t)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ import kotlinx.coroutines.CoroutineScope
|
|||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package io.github.openflocon.flocon.websocket
|
||||
|
||||
import io.github.openflocon.flocon.FloconLogger
|
||||
import io.github.openflocon.flocon.plugins.network.model.FloconNetworkCallRequest
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
|
|
@ -9,7 +8,6 @@ import okhttp3.Response
|
|||
import okhttp3.WebSocket
|
||||
import okhttp3.WebSocketListener
|
||||
import java.io.EOFException
|
||||
import java.util.concurrent.ConcurrentLinkedQueue
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.coroutines.resume
|
||||
import kotlin.coroutines.resumeWithException
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue