using MQTTnet.Client; using MQTTnet.Server; using System; using System.Threading.Tasks; namespace MQTTnet.Core.Tests { public static class TestServerExtensions { /// /// publishes a message with a client and waits in the server until a message with the same topic is received /// /// public static async Task PublishAndWaitForAsync(this IMqttClient client, IMqttServer server, MqttApplicationMessage message) { var tcs = new TaskCompletionSource(); EventHandler handler = (sender, args) => { if (args.ApplicationMessage.Topic == message.Topic) { tcs.SetResult(true); } }; server.ApplicationMessageReceived += handler; try { await client.PublishAsync(message).ConfigureAwait(false); await tcs.Task.ConfigureAwait(false); } finally { server.ApplicationMessageReceived -= handler; } } } }