Add ability to get session from server by client id (#2131)

Co-authored-by: Anton Smolkov <anton.smolkov@idp.zyfra.com>
This commit is contained in:
Anton Smolkov
2024-12-23 12:05:09 +01:00
committed by GitHub
co-authored by Anton Smolkov
parent 9f81a2bb71
commit 8eb884fa5d
2 changed files with 26 additions and 0 deletions
@@ -311,6 +311,25 @@ public sealed class MqttClientSessionsManager : ISubscriptionChangedNotification
return Task.FromResult((IList<MqttClientStatus>)result);
}
public Task<MqttSessionStatus> GetSessionStatus(string id)
{
_sessionsManagementLock.EnterReadLock();
try
{
if (!_sessionsStorage.TryGetSession(id, out var session))
{
throw new InvalidOperationException($"Session with ID '{id}' not found.");
}
var sessionStatus = new MqttSessionStatus(session);
return Task.FromResult(sessionStatus);
}
finally
{
_sessionsManagementLock.ExitReadLock();
}
}
public Task<IList<MqttSessionStatus>> GetSessionsStatus()
{
var result = new List<MqttSessionStatus>();
+7
View File
@@ -237,6 +237,13 @@ public class MqttServer : Disposable
return _clientSessionsManager.GetSessionsStatus();
}
public Task<MqttSessionStatus> GetSessionAsync(string id)
{
ThrowIfNotStarted();
return _clientSessionsManager.GetSessionStatus(id);
}
public Task InjectApplicationMessage(InjectedMqttApplicationMessage injectedApplicationMessage, CancellationToken cancellationToken = default)
{
ArgumentNullException.ThrowIfNull(injectedApplicationMessage);