commonMain.hassemble.events.EventSubscription.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hassemble-jvm Show documentation
Show all versions of hassemble-jvm Show documentation
Interact with your Home Assistant server using Kotlin.
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) }
}
}