mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-11-05 14:02:55 +08:00
Expose WithClientMessageQueueInterceptor
This commit is contained in:
committed by
Sallin Marc, I212
parent
b0c603082b
commit
f1f9924bce
@@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MQTTnet.Server
|
||||||
|
{
|
||||||
|
public class MqttClientMessageQueueInterceptorDelegate : IMqttServerClientMessageQueueInterceptor
|
||||||
|
{
|
||||||
|
private readonly Func<MqttClientMessageQueueInterceptorContext, Task> _callback;
|
||||||
|
|
||||||
|
public MqttClientMessageQueueInterceptorDelegate(Action<MqttClientMessageQueueInterceptorContext> callback)
|
||||||
|
{
|
||||||
|
if (callback == null) throw new ArgumentNullException(nameof(callback));
|
||||||
|
|
||||||
|
_callback = context =>
|
||||||
|
{
|
||||||
|
callback(context);
|
||||||
|
return Task.FromResult(0);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public MqttClientMessageQueueInterceptorDelegate(Func<MqttClientMessageQueueInterceptorContext, Task> callback)
|
||||||
|
{
|
||||||
|
_callback = callback ?? throw new ArgumentNullException(nameof(callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task InterceptClientMessageQueueEnqueueAsync(MqttClientMessageQueueInterceptorContext context)
|
||||||
|
{
|
||||||
|
return _callback(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -175,6 +175,18 @@ namespace MQTTnet.Server
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MqttServerOptionsBuilder WithClientMessageQueueInterceptor(IMqttServerClientMessageQueueInterceptor value)
|
||||||
|
{
|
||||||
|
_options.ClientMessageQueueInterceptor = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MqttServerOptionsBuilder WithClientMessageQueueInterceptor(Action<MqttClientMessageQueueInterceptorContext> value)
|
||||||
|
{
|
||||||
|
_options.ClientMessageQueueInterceptor = new MqttClientMessageQueueInterceptorDelegate(value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public MqttServerOptionsBuilder WithSubscriptionInterceptor(IMqttServerSubscriptionInterceptor value)
|
public MqttServerOptionsBuilder WithSubscriptionInterceptor(IMqttServerSubscriptionInterceptor value)
|
||||||
{
|
{
|
||||||
_options.SubscriptionInterceptor = value;
|
_options.SubscriptionInterceptor = value;
|
||||||
|
|||||||
@@ -1415,5 +1415,42 @@ namespace MQTTnet.Tests
|
|||||||
Assert.AreEqual("a", undeliverd);
|
Assert.AreEqual("a", undeliverd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public async Task Intercept_ClientMessageQueue()
|
||||||
|
{
|
||||||
|
using (var testEnvironment = new TestEnvironment(TestContext))
|
||||||
|
{
|
||||||
|
await testEnvironment.StartServerAsync(new MqttServerOptionsBuilder()
|
||||||
|
.WithClientMessageQueueInterceptor(c => c.ApplicationMessage.Topic = "a"));
|
||||||
|
|
||||||
|
var topicAReceived = false;
|
||||||
|
var topicBReceived = false;
|
||||||
|
|
||||||
|
var client = await testEnvironment.ConnectClientAsync();
|
||||||
|
client.UseApplicationMessageReceivedHandler(c =>
|
||||||
|
{
|
||||||
|
if (c.ApplicationMessage.Topic == "a")
|
||||||
|
{
|
||||||
|
topicAReceived = true;
|
||||||
|
}
|
||||||
|
else if (c.ApplicationMessage.Topic == "b")
|
||||||
|
{
|
||||||
|
topicBReceived = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await client.SubscribeAsync("a");
|
||||||
|
await client.SubscribeAsync("b");
|
||||||
|
|
||||||
|
await client.PublishAsync("b");
|
||||||
|
|
||||||
|
await Task.Delay(500);
|
||||||
|
|
||||||
|
Assert.IsTrue(topicAReceived);
|
||||||
|
Assert.IsFalse(topicBReceived);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user