Add async handler interfaces for connected and disconnected to allow async code to execute on connect

This commit is contained in:
Dominik Psenner
2019-02-15 15:02:15 +01:00
parent 6c5c9e5bf2
commit a1f414a06d
8 changed files with 129 additions and 10 deletions
@@ -0,0 +1,9 @@
using System.Threading.Tasks;
namespace MQTTnet.Client.Connecting
{
public interface IMqttClientConnectedHandler
{
Task HandleConnectedAsync(MqttClientConnectedEventArgs eventArgs);
}
}
@@ -0,0 +1,31 @@
using System;
using System.Threading.Tasks;
namespace MQTTnet.Client.Connecting
{
public class MqttClientConnectedHandlerDelegate : IMqttClientConnectedHandler
{
private readonly Func<MqttClientConnectedEventArgs, Task> _handler;
public MqttClientConnectedHandlerDelegate(Action<MqttClientConnectedEventArgs> handler)
{
if (handler == null) throw new ArgumentNullException(nameof(handler));
_handler = context =>
{
handler(context);
return Task.FromResult(0);
};
}
public MqttClientConnectedHandlerDelegate(Func<MqttClientConnectedEventArgs, Task> handler)
{
_handler = handler ?? throw new ArgumentNullException(nameof(handler));
}
public Task HandleConnectedAsync(MqttClientConnectedEventArgs eventArgs)
{
return _handler(eventArgs);
}
}
}