public async Task ManagedClients_Will_Message_Send() { using (var testEnvironment = new TestEnvironment(TestContext)) { var receivedMessagesCount = 0; await testEnvironment.StartServerAsync(); var willMessage = new MqttApplicationMessageBuilder().WithTopic("My/last/will").WithAtMostOnceQoS().Build(); var clientOptions = new MqttClientOptionsBuilder() .WithTcpServer("localhost", testEnvironment.ServerPort) .WithWillMessage(willMessage); var dyingClient = testEnvironment.CreateClient(); var dyingManagedClient = new ManagedMqttClient(dyingClient, testEnvironment.ClientLogger); await dyingManagedClient.StartAsync(new ManagedMqttClientOptionsBuilder() .WithClientOptions(clientOptions) .Build()); var recievingClient = await testEnvironment.ConnectClientAsync(); await recievingClient.SubscribeAsync("My/last/will"); recievingClient.UseApplicationMessageReceivedHandler(context => Interlocked.Increment(ref receivedMessagesCount)); dyingManagedClient.Dispose(); await Task.Delay(1000); Assert.AreEqual(1, receivedMessagesCount); } }
protected override IEnumerable <Prompt> Execute_Subclass() { try { StartMqttClient().Wait(); } catch (Exception ex) { Logger.LogError(LogCategory.Processor, this.Name, $"Starting MQTT Client failed"); Prompts.Add(ex.ToPrompt()); return(Prompts); } if (Signals == null) { Prompts.Add(new Prompt { Message = "There are no signals in the cache, please run the SetupProcessor or verify that it has run successfully.", Severity = PromptSeverity.MayNotContinue }); return(Prompts); } // Read existing subscriptions if (!ReadExistingSubscriptions(Signals).Result) { Prompts.Add(new Prompt { Message = $"Did not successfully read all existing subscriptions." }); } // Subscribe and read new subscriptions if (!SubscribeAndReadNew(Signals).Result) { Prompts.Add(new Prompt { Message = $"Did not successfully read all new subscriptions." }); } ManagedMqttClient.StopAsync().Wait(); ManagedMqttClient.Dispose(); // Update the cache with new values.. Signals = Signals; return(Prompts); }
public async Task ManagedClients_Will_Message_Send() { using (var testEnvironment = CreateTestEnvironment()) { await testEnvironment.StartServer(); var receivedMessagesCount = 0; var clientOptions = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1", testEnvironment.ServerPort) .WithWillTopic("My/last/will") .WithWillQualityOfServiceLevel(MqttQualityOfServiceLevel.AtMostOnce) .Build(); var dyingClient = testEnvironment.CreateClient(); var dyingManagedClient = new ManagedMqttClient(dyingClient, testEnvironment.ClientLogger); await dyingManagedClient.StartAsync(new ManagedMqttClientOptionsBuilder().WithClientOptions(clientOptions).Build()); // Wait until the managed client is fully set up and running. await Task.Delay(1000); var receivingClient = await testEnvironment.ConnectClient(); receivingClient.ApplicationMessageReceivedAsync += e => { Interlocked.Increment(ref receivedMessagesCount); return(PlatformAbstractionLayer.CompletedTask); }; await receivingClient.SubscribeAsync("My/last/will"); // Disposing the client will not sent a DISCONNECT packet so that connection is terminated // which will lead to the will publish. dyingManagedClient.Dispose(); // Wait for arrival of the will message at the receiver. await Task.Delay(5000); Assert.AreEqual(1, receivedMessagesCount); } }