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(); void Handler(object sender, MqttApplicationMessageReceivedEventArgs 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; } } } }