private IEnumerable <TopicFilter> WrapTopicFilters(IEnumerable <ITopicFilter> topicFilters) { return(topicFilters.Select(tFilter => { var tf = new TopicFilterBuilder().WithTopic(tFilter.Topic); switch (tFilter.QualityOfServiceLevel) { case QoSLevel.AtMostOnce: tf.WithAtMostOnceQoS(); break; case QoSLevel.AtLeastOnce: tf.WithAtLeastOnceQoS(); break; case QoSLevel.ExactlyOnce: tf.WithExactlyOnceQoS(); break; default: throw new ArgumentOutOfRangeException(); } return tf.Build(); })); }
private async void Subscribe_Click(object sender, EventArgs e) { if (mqttClient == null || !mqttClient.IsConnected) { return; } if (!string.IsNullOrWhiteSpace(topicSubscribe.Text)) { TopicFilterBuilder builder = new TopicFilterBuilder() .WithTopic(topicSubscribe.Text); if (qosSubscribe.SelectedIndex == -1) { qosSubscribe.SelectedIndex = 0; } builder.WithQualityOfServiceLevel((MqttQualityOfServiceLevel)qosSubscribe.SelectedIndex); try { await mqttClient.SubscribeAsync(builder.Build()); if (!subscriptions.Items.Contains(topicSubscribe.Text)) { subscriptions.Items.Add(topicSubscribe.Text); } } catch (Exception ex) { MessageBox.Show(this, ex.Message); } } }
public MqttDriver(string mqttBrokerHost, int tcpPort, IList <LoraControllerFullInfo> loraControllers, IChannelCommandManagerDriverSide <string, IInteleconCommand> commandManagerDriverSide) { _mqttBrokerHost = mqttBrokerHost; _tcpPort = tcpPort; _loraControllers = loraControllers; _commandManagerDriverSide = commandManagerDriverSide; _commandManagerDriverSide.CommandRequestAccepted += CommandManagerDriverSideOnCommandRequestAccepted; _lastSixsCache = new AttachedLastDataCache(); var subscriptionList = loraControllers.GroupBy(lc => lc.RxTopicName).Select(g => g.Key); var topicFilters = new List <TopicFilter>(); foreach (var topicName in subscriptionList) { Log.Log("[MQTT DRIVER] .ctor topic name to subscribe added: " + topicName); var tfb = new TopicFilterBuilder(); tfb.WithTopic(topicName); topicFilters.Add(tfb.Build()); } _topicFilters = topicFilters; Log.Log("[MQTT DRIVER] .ctor topics to subscribe to generated, count = " + _topicFilters.Count); RunAsync().Wait(); Log.Log("[MQTT DRIVER] .ctor complete"); }
public MqttClientSubscribeOptionsBuilder WithTopicFilter(TopicFilterBuilder topicFilterBuilder) { if (topicFilterBuilder == null) { throw new ArgumentNullException(nameof(topicFilterBuilder)); } return(WithTopicFilter(topicFilterBuilder.Build())); }
public MQTTClient() { var mqttClient = new MqttFactory().CreateMqttClient(); var optionBuilder = new MqttClientOptionsBuilder(); optionBuilder .WithClientId("c001") .WithTcpServer(opts => { opts.Server = "127.0.0.1"; opts.Port = 108; }) .WithCredentials("u001", "p001") .WithCleanSession(true); var options = optionBuilder.Build(); mqttClient.ConnectAsync(options, CancellationToken.None).Wait(); var recieveHander = new MsgRecieveHandler(); mqttClient.ApplicationMessageReceivedHandler = recieveHander; var topicBuilder = new TopicFilterBuilder(); topicBuilder.WithTopic("家/客厅/空调/#") .WithAtMostOnceQoS(); var topicHome = topicBuilder.Build(); var subscribOptionBuilder = new MqttClientSubscribeOptionsBuilder(); subscribOptionBuilder.WithTopicFilter(topicHome); var subOpt = subscribOptionBuilder.Build(); mqttClient.SubscribeAsync(subOpt, CancellationToken.None).Wait(); var appMsg = new MqttApplicationMessage(); appMsg.Topic = "家/客厅/空调/开关"; appMsg.Payload = Encoding.UTF8.GetBytes("我来了~"); appMsg.QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce; appMsg.Retain = false; mqttClient.PublishAsync(appMsg, CancellationToken.None).Wait(); //var appMsg = new MqttApplicationMessage("家/客厅/空调/开关", // Encoding.UTF8.GetBytes("消息内容"), // MqttQualityOfServiceLevel.AtMostOnce, false); }
/// <summary> /// TODO su /// </summary> /// <param name="topics"></param> /// <returns></returns> public async Task SubscribeAsync(IEnumerable <MQTTTopicConfiguration> topics) { var returnList = new List <MQTTTopicConfiguration>(); var errorList = new List <Error>(); var topicBuilder = new TopicFilterBuilder(); foreach (var topic in topics) { topicBuilder.WithTopic(topic.Name).WithQualityOfServiceLevel((MqttQualityOfServiceLevel)topic.QoS); } var result = await _client.SubscribeAsync(topicBuilder.Build()); }
public async Task SubscribeMessage(IMqttClient mqttClient, TopicFilterBuilder topicFilterBuilder) { //var a = new TopicFilterBuilder().WithTopic("").WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce); await mqttClient.SubscribeAsync(topicFilterBuilder.Build()); }