refact: [DASHBOARD] removed java code (#367)

Co-authored-by: Florent Champigny <florent@bere.al>
This commit is contained in:
Florent CHAMPIGNY 2025-10-19 21:20:05 +02:00 committed by GitHub
parent 6c822dc26b
commit feb441bf48
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 56 additions and 45 deletions

View file

@ -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)
}
}
}
}

View file

@ -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

View file

@ -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