All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.hassemble.events.EventSubscription.kt Maven / Gradle / Ivy

The newest version!
package hassemble.events

import hassemble.HomeAssistantApiClientImpl
import hassemble.core.mapping.ObjectMapper
import hassemble.errorHandling.EventHandlerExceptionHandler
import hassemble.observability.Switchable
import kotlinx.serialization.json.JsonElement
import kotlin.reflect.KClass

internal class EventSubscription(
    private val connection: HomeAssistantApiClientImpl,
    private val mapper: ObjectMapper,
    private val eventDataType: KClass<*>
) {
    private val eventHandler: MutableList> = mutableListOf()

    fun attachEventHandler(handler: EventHandlerFunction): Switchable =
        EventHandlerImpl(
            handler,
            EventHandlerExceptionHandler(connection.eventHandlerExceptionHandlerFunction)
        ).also { eventHandler.add(it) }

    @Suppress("UNCHECKED_CAST")
    fun invokeEventHandler(eventData: JsonElement) {
        val mappedEventData: ED = mapper.fromJson(eventData, eventDataType) as ED
        eventHandler.forEach { handler -> handler.handle(mappedEventData) }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy