diff --git a/Source/MQTTnet/Server/MqttClientKeepAliveMonitor.cs b/Source/MQTTnet/Server/MqttClientKeepAliveMonitor.cs index f1a209b4..5abc1640 100644 --- a/Source/MQTTnet/Server/MqttClientKeepAliveMonitor.cs +++ b/Source/MQTTnet/Server/MqttClientKeepAliveMonitor.cs @@ -50,6 +50,12 @@ namespace MQTTnet.Server _isPaused = false; } + public void Reset() + { + _lastPacketReceivedTracker.Restart(); + _lastNonKeepAlivePacketReceivedTracker.Restart(); + } + public void PacketReceived(MqttBasePacket packet) { _lastPacketReceivedTracker.Restart(); diff --git a/Source/MQTTnet/Server/MqttClientSession.cs b/Source/MQTTnet/Server/MqttClientSession.cs index 12045692..95d6d072 100644 --- a/Source/MQTTnet/Server/MqttClientSession.cs +++ b/Source/MQTTnet/Server/MqttClientSession.cs @@ -56,6 +56,11 @@ namespace MQTTnet.Server public string ClientId { get; } + public void ResumeSession() + { + _keepAliveMonitor.Reset(); + } + public void FillStatus(MqttClientSessionStatus status) { status.ClientId = ClientId; @@ -87,11 +92,11 @@ namespace MQTTnet.Server _cancellationTokenSource = new CancellationTokenSource(); - //woraround for https://github.com/dotnet/corefx/issues/24430 + //workaround for https://github.com/dotnet/corefx/issues/24430 #pragma warning disable 4014 _cleanupHandle = _cancellationTokenSource.Token.Register(() => CleanupAsync()); #pragma warning restore 4014 - //endworkaround + //end workaround _wasCleanDisconnect = false; _willMessage = connectPacket.WillMessage; diff --git a/Source/MQTTnet/Server/MqttClientSessionsManager.cs b/Source/MQTTnet/Server/MqttClientSessionsManager.cs index 28acc79d..b6cea7fa 100644 --- a/Source/MQTTnet/Server/MqttClientSessionsManager.cs +++ b/Source/MQTTnet/Server/MqttClientSessionsManager.cs @@ -312,6 +312,8 @@ namespace MQTTnet.Server } else { + clientSession.ResumeSession(); + _logger.Verbose("Reusing existing session of client '{0}'.", connectPacket.ClientId); } }