// Mqtt message event handler private void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { Console.WriteLine("DeviceActor: " + e.Topic); if (e.Topic == _topicUnregister) { _sender.Tell(new UnregisterDevice(), _self); _self.Tell(new UnregisterDevice(), _self); } if (e.Topic == _topicDisconnect) { _sender.Tell(new DisconnectDevice(), _self); _self.Tell(new DisconnectDevice(), _self); } if (e.Topic == _topicStateChanged) { MqttDeviceStateDto mqttDto = MqttDeviceStateDto.Deserialize(e.Message); _sender.Tell(new DeviceStateChanged(new DeviceStateDto(_deviceId, mqttDto.CurrentState, mqttDto.TimeStamp)), _self); } if (e.Topic == _topicSetDeviceStateChanged) { MqttDeviceStateDto mqttDto = MqttDeviceStateDto.Deserialize(e.Message); _sender.Tell(new SetDeviceStatusReceived(new DeviceStateDto(_deviceId, mqttDto.CurrentState, mqttDto.TimeStamp)), _self); } }
private void ClientOnMqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs mqttMsgPublishEventArgs) { if (mqttMsgPublishEventArgs.Topic == DeviceTopic.Unregistered + "/" + _deviceId) { if (_client != null && _client.IsConnected) { _client.Disconnect(); } btnConnect.Dispatcher.Invoke(() => { btnConnect.IsEnabled = true; }); btnDisconnect.Dispatcher.Invoke(() => { btnDisconnect.IsEnabled = false; }); btnOnOff.Dispatcher.Invoke(() => { btnOnOff.IsEnabled = false; }); } else if (mqttMsgPublishEventArgs.Topic == DeviceTopic.SetDeviceState + "/" + _deviceId) { _deviceState = MqttDeviceStateDto.Deserialize(mqttMsgPublishEventArgs.Message).CurrentState; btnOnOff.Dispatcher.Invoke(() => btnOnOff.Content = _deviceState ? "Switch to OFF" : "Switch to ON"); SetBackgroundColor(); _client.Publish(DeviceTopic.SetDeviceStateChanged + "/" + _deviceId, (new MqttDeviceStateDto(_deviceState)).Serialize(), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); } }