mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-18 10:26:11 +08:00
Merge pull request #891 from PSanetra/async-message-processing
Introduce asynchronous message processing
This commit is contained in:
@@ -12,6 +12,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@@ -434,6 +435,49 @@ namespace MQTTnet.Tests
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task Publish_QoS_1_In_ApplicationMessageReceiveHandler()
|
||||
{
|
||||
using (var testEnvironment = new TestEnvironment(TestContext))
|
||||
{
|
||||
await testEnvironment.StartServerAsync();
|
||||
|
||||
const string client1Topic = "client1/topic";
|
||||
const string client2Topic = "client2/topic";
|
||||
const string expectedClient2Message = "hello client2";
|
||||
|
||||
var client1 = await testEnvironment.ConnectClientAsync();
|
||||
client1.UseApplicationMessageReceivedHandler(async c =>
|
||||
{
|
||||
await client1.PublishAsync(client2Topic, expectedClient2Message, MqttQualityOfServiceLevel.AtLeastOnce);
|
||||
});
|
||||
|
||||
await client1.SubscribeAsync(client1Topic, MqttQualityOfServiceLevel.AtLeastOnce);
|
||||
|
||||
var client2 = await testEnvironment.ConnectClientAsync();
|
||||
|
||||
var client2TopicResults = new List<string>();
|
||||
|
||||
client2.UseApplicationMessageReceivedHandler(c =>
|
||||
{
|
||||
client2TopicResults.Add(Encoding.UTF8.GetString(c.ApplicationMessage.Payload));
|
||||
});
|
||||
|
||||
await client2.SubscribeAsync(client2Topic);
|
||||
|
||||
var client3 = await testEnvironment.ConnectClientAsync();
|
||||
var message = new MqttApplicationMessageBuilder().WithTopic(client1Topic).Build();
|
||||
await client3.PublishAsync(message);
|
||||
await client3.PublishAsync(message);
|
||||
|
||||
await Task.Delay(500);
|
||||
|
||||
Assert.AreEqual(2, client2TopicResults.Count);
|
||||
Assert.AreEqual(expectedClient2Message, client2TopicResults[0]);
|
||||
Assert.AreEqual(expectedClient2Message, client2TopicResults[1]);
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task Subscribe_In_Callback_Events()
|
||||
{
|
||||
@@ -565,7 +609,7 @@ namespace MQTTnet.Tests
|
||||
|
||||
for (var i = 0; i < 98; i++)
|
||||
{
|
||||
Assert.IsFalse(clients[i].IsConnected);
|
||||
Assert.IsFalse(clients[i].IsConnected, $"clients[{i}] is not connected");
|
||||
}
|
||||
|
||||
Assert.IsTrue(clients[99].IsConnected);
|
||||
|
||||
Reference in New Issue
Block a user