From 431142471fc4513c379ecbcea20142c70d112f4c Mon Sep 17 00:00:00 2001 From: Christian <6939810+chkr1011@users.noreply.github.com> Date: Sun, 16 Oct 2022 11:12:08 +0200 Subject: [PATCH] Add samples. --- Samples/Client/Client_Subscribe_Samples.cs | 130 ++++++++++++++------- 1 file changed, 90 insertions(+), 40 deletions(-) diff --git a/Samples/Client/Client_Subscribe_Samples.cs b/Samples/Client/Client_Subscribe_Samples.cs index 740f9481..d4f9ff42 100644 --- a/Samples/Client/Client_Subscribe_Samples.cs +++ b/Samples/Client/Client_Subscribe_Samples.cs @@ -8,6 +8,7 @@ using MQTTnet.Client; using MQTTnet.Packets; +using MQTTnet.Protocol; using MQTTnet.Samples.Helpers; namespace MQTTnet.Samples.Client; @@ -24,9 +25,7 @@ public static class Client_Subscribe_Samples using (var mqttClient = mqttFactory.CreateMqttClient()) { - var mqttClientOptions = new MqttClientOptionsBuilder() - .WithTcpServer("broker.hivemq.com") - .Build(); + var mqttClientOptions = new MqttClientOptionsBuilder().WithTcpServer("broker.hivemq.com").Build(); // Setup message handling before connecting so that queued messages // are also handled properly. When there is no event handler attached all @@ -42,7 +41,11 @@ public static class Client_Subscribe_Samples await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None); var mqttSubscribeOptions = mqttFactory.CreateSubscribeOptionsBuilder() - .WithTopicFilter(f => { f.WithTopic("mqttnet/samples/topic/2"); }) + .WithTopicFilter( + f => + { + f.WithTopic("mqttnet/samples/topic/2"); + }) .Build(); await mqttClient.SubscribeAsync(mqttSubscribeOptions, CancellationToken.None); @@ -54,35 +57,6 @@ public static class Client_Subscribe_Samples } } - public static async Task Subscribe_Topic() - { - /* - * This sample subscribes to a topic. - */ - - var mqttFactory = new MqttFactory(); - - using (var mqttClient = mqttFactory.CreateMqttClient()) - { - var mqttClientOptions = new MqttClientOptionsBuilder() - .WithTcpServer("broker.hivemq.com") - .Build(); - - await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None); - - var mqttSubscribeOptions = mqttFactory.CreateSubscribeOptionsBuilder() - .WithTopicFilter(f => { f.WithTopic("mqttnet/samples/topic/1"); }) - .Build(); - - var response = await mqttClient.SubscribeAsync(mqttSubscribeOptions, CancellationToken.None); - - Console.WriteLine("MQTT client subscribed to topic."); - - // The response contains additional data sent by the server after subscribing. - response.DumpToConsole(); - } - } - public static async Task Send_Responses() { /* @@ -100,22 +74,98 @@ public static class Client_Subscribe_Samples // Now respond to the broker with a reason code other than success. args.ReasonCode = MqttApplicationMessageReceivedReasonCode.ImplementationSpecificError; args.ResponseReasonString = "That did not work!"; - + // User properties require MQTT v5! args.ResponseUserProperties.Add(new MqttUserProperty("My", "Data")); - + // Now the broker will resend the message again. return Task.CompletedTask; }; - - var mqttClientOptions = new MqttClientOptionsBuilder() - .WithTcpServer("broker.hivemq.com") - .Build(); + + var mqttClientOptions = new MqttClientOptionsBuilder().WithTcpServer("broker.hivemq.com").Build(); await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None); var mqttSubscribeOptions = mqttFactory.CreateSubscribeOptionsBuilder() - .WithTopicFilter(f => { f.WithTopic("mqttnet/samples/topic/1"); }) + .WithTopicFilter( + f => + { + f.WithTopic("mqttnet/samples/topic/1"); + }) + .Build(); + + var response = await mqttClient.SubscribeAsync(mqttSubscribeOptions, CancellationToken.None); + + Console.WriteLine("MQTT client subscribed to topic."); + + // The response contains additional data sent by the server after subscribing. + response.DumpToConsole(); + } + } + + public static async Task Subscribe_Multiple_Topics() + { + /* + * This sample subscribes to several topics in a single request. + */ + + var mqttFactory = new MqttFactory(); + + using (var mqttClient = mqttFactory.CreateMqttClient()) + { + var mqttClientOptions = new MqttClientOptionsBuilder().WithTcpServer("broker.hivemq.com").Build(); + + await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None); + + // Create the subscribe options including several topics with different options. + // It is also possible to all of these topics using a dedicated call of _SubscribeAsync_ per topic. + var mqttSubscribeOptions = mqttFactory.CreateSubscribeOptionsBuilder() + .WithTopicFilter( + f => + { + f.WithTopic("mqttnet/samples/topic/1"); + }) + .WithTopicFilter( + f => + { + f.WithTopic("mqttnet/samples/topic/2").WithNoLocal(); + }) + .WithTopicFilter( + f => + { + f.WithTopic("mqttnet/samples/topic/3").WithRetainHandling(MqttRetainHandling.SendAtSubscribe); + }) + .Build(); + + var response = await mqttClient.SubscribeAsync(mqttSubscribeOptions, CancellationToken.None); + + Console.WriteLine("MQTT client subscribed to topics."); + + // The response contains additional data sent by the server after subscribing. + response.DumpToConsole(); + } + } + + public static async Task Subscribe_Topic() + { + /* + * This sample subscribes to a topic. + */ + + var mqttFactory = new MqttFactory(); + + using (var mqttClient = mqttFactory.CreateMqttClient()) + { + var mqttClientOptions = new MqttClientOptionsBuilder().WithTcpServer("broker.hivemq.com").Build(); + + await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None); + + var mqttSubscribeOptions = mqttFactory.CreateSubscribeOptionsBuilder() + .WithTopicFilter( + f => + { + f.WithTopic("mqttnet/samples/topic/1"); + }) .Build(); var response = await mqttClient.SubscribeAsync(mqttSubscribeOptions, CancellationToken.None);