Introduce mqttMessageToReceivedZigbeeEvent

To make it more obvious that both cases in mainAsync
just handle events.
This commit is contained in:
Sven van Heugten 2026-01-03 19:14:09 +01:00
parent ae66114ca1
commit 915d01e086

View file

@ -36,6 +36,10 @@ let private publishZigbeeCommands (mqttClient: IMqttClient) (logger: ILogger) (c
} }
let private handleEvent (mqttClient: IMqttClient) (logger: ILogger) (state: State) (event: Event) = let private handleEvent (mqttClient: IMqttClient) (logger: ILogger) (state: State) (event: Event) =
match event with
| ReceivedZigbeeEvent payload -> logger.LogInformation("Received message with payload {Payload}", payload)
| _ -> ()
let result = event |> onEventReceived state let result = event |> onEventReceived state
match result with match result with
@ -49,18 +53,11 @@ let private handleEvent (mqttClient: IMqttClient) (logger: ILogger) (state: Stat
logger.LogError("Error {Error} while {Event}", e, event) logger.LogError("Error {Error} while {Event}", e, event)
async.Return state async.Return state
let private onMqttMessageReceived let private mqttMessageToReceivedZigbeeEvent (message: MqttApplicationMessage) =
(mqttClient: IMqttClient)
(logger: ILogger)
(state: State)
(message: MqttApplicationMessage)
=
let payload = message.Payload let payload = message.Payload
let decodedPayload = Encoding.UTF8.GetString(&payload) let decodedPayload = Encoding.UTF8.GetString(&payload)
logger.LogInformation("Received message with payload {Payload}", decodedPayload) ReceivedZigbeeEvent decodedPayload
ReceivedZigbeeEvent decodedPayload |> handleEvent mqttClient logger state
[<EntryPoint>] [<EntryPoint>]
let mainAsync _ = let mainAsync _ =
@ -89,10 +86,12 @@ let mainAsync _ =
mqttClient.add_ApplicationMessageReceivedAsync (fun e -> mqttClient.add_ApplicationMessageReceivedAsync (fun e ->
async { async {
let event = mqttMessageToReceivedZigbeeEvent e.ApplicationMessage
do! stateLock.WaitAsync() |> Async.AwaitTask do! stateLock.WaitAsync() |> Async.AwaitTask
try try
let! newState = onMqttMessageReceived mqttClient logger state e.ApplicationMessage let! newState = event |> handleEvent mqttClient logger state
state <- newState state <- newState
finally finally
stateLock.Release() |> ignore stateLock.Release() |> ignore