Fix session takeover.

This commit is contained in:
Christian Kratky
2018-12-27 23:05:57 +01:00
parent c0507fcc55
commit b527059b72
3 changed files with 28 additions and 18 deletions
@@ -60,9 +60,9 @@ namespace MQTTnet.Server
}
}
public Task StartSession(IMqttChannelAdapter clientAdapter)
public Task HandleConnectionAsync(IMqttChannelAdapter clientAdapter)
{
return Task.Run(() => RunSessionAsync(clientAdapter, _cancellationToken), _cancellationToken);
return Task.Run(() => HandleConnectionAsync(clientAdapter, _cancellationToken), _cancellationToken);
}
public async Task<IList<IMqttClientSessionStatus>> GetClientStatusAsync()
@@ -207,7 +207,7 @@ namespace MQTTnet.Server
}
}
private async Task RunSessionAsync(IMqttChannelAdapter clientAdapter, CancellationToken cancellationToken)
private async Task HandleConnectionAsync(IMqttChannelAdapter clientAdapter, CancellationToken cancellationToken)
{
var clientId = string.Empty;
@@ -295,11 +295,11 @@ namespace MQTTnet.Server
var isSessionPresent = _sessions.TryGetValue(connectPacket.ClientId, out var clientSession);
if (isSessionPresent)
{
await clientSession.StopAsync(MqttClientDisconnectType.Clean).ConfigureAwait(false);
if (connectPacket.CleanSession)
{
_sessions.Remove(connectPacket.ClientId);
await clientSession.StopAsync(MqttClientDisconnectType.Clean).ConfigureAwait(false);
clientSession.Dispose();
clientSession = null;