public bool EjectSession(string username, bool isObserved = true)
{
using (_logger.Push("Ejecting session for {0}.".ToFormat(username)))
{
if (!_agentSessionCacheByUsername.ContainsKey(username))
{
_logger.LogDebug("No session was found for the user.");
return false;
}
IClarifySession session;
lock (_agentSessionCacheByUsername)
{
if (!_agentSessionCacheByUsername.ContainsKey(username))
{
_logger.LogDebug("Session was there when we started but someone else ejected it.");
return false;
}
session = _agentSessionCacheByUsername[username];
_agentSessionCacheByUsername.Remove(username);
_logger.LogDebug("{0} sessions are now in the cache.", _agentSessionCacheByUsername.Count);
}
if (session == null) return true;
if (isObserved)
{
_logger.LogDebug("Expiring session {0}.", session.Id);
_sessionEndObserver().SessionExpired(session);
}
_logger.LogDebug("Closing session {0}.", session.Id);
session.Close();
}
return true;
}