Add new server option to disable/enable persistent sessions.

This commit is contained in:
Christian
2018-05-15 22:04:05 +02:00
parent 3e6edb92c5
commit 719838de3b
4 changed files with 30 additions and 1 deletions
@@ -5,6 +5,9 @@ namespace MQTTnet.Server
public interface IMqttServerOptions
{
int ConnectionBacklog { get; }
bool EnablePersistentSessions { get; }
int MaxPendingMessagesPerClient { get; }
MqttPendingMessagesOverflowStrategy PendingMessagesOverflowStrategy { get; }
@@ -107,6 +107,11 @@ namespace MQTTnet.Server
_logger.Error(exception, exception.Message);
}
if (!_options.EnablePersistentSessions)
{
await DeleteSessionAsync(clientId).ConfigureAwait(false);
}
Server.OnClientDisconnected(new ConnectedMqttClient
{
ClientId = clientId,
@@ -224,6 +229,20 @@ namespace MQTTnet.Server
return context.ReturnCode;
}
private async Task DeleteSessionAsync(string clientId)
{
await _sessionsLock.EnterAsync(CancellationToken.None);
try
{
_sessions.Remove(clientId);
_logger.Verbose("Session for client '{0}' deleted.", clientId);
}
finally
{
_sessionsLock.Exit();
}
}
private async Task<GetOrCreateClientSessionResult> PrepareClientSessionAsync(MqttConnectPacket connectPacket)
{
await _sessionsLock.EnterAsync(CancellationToken.None).ConfigureAwait(false);
@@ -8,10 +8,11 @@ namespace MQTTnet.Server
public MqttServerTlsEndpointOptions TlsEndpointOptions { get; } = new MqttServerTlsEndpointOptions();
public bool EnablePersistentSessions { get; set; }
public int ConnectionBacklog { get; set; } = 10;
public int MaxPendingMessagesPerClient { get; set; } = 250;
public MqttPendingMessagesOverflowStrategy PendingMessagesOverflowStrategy { get; set; } = MqttPendingMessagesOverflowStrategy.DropOldestQueuedMessage;
public TimeSpan DefaultCommunicationTimeout { get; set; } = TimeSpan.FromSeconds(15);
@@ -103,6 +103,12 @@ namespace MQTTnet.Server
return this;
}
public MqttServerOptionsBuilder WithPersistentSessions()
{
_options.EnablePersistentSessions = true;
return this;
}
public IMqttServerOptions Build()
{
return _options;