public void Stop(bool force)
{
if (IsStopped)
{
return;
}
List <Session> enabledSessions = new List <Session>();
lock (sync_)
{
foreach (SessionID sessionID in connected_)
{
Session session = Session.LookupSession(sessionID);
if (session.IsEnabled)
{
enabledSessions.Add(session);
session.Logout();
}
}
}
if (!force)
{
for (int second = 0; (second < 10) && IsLoggedOn(); ++second)
{
Thread.Sleep(1000);
}
}
lock (sync_)
{
HashSet <SessionID> connectedSessionIDs = new HashSet <SessionID>(connected_);
foreach (SessionID sessionID in connectedSessionIDs)
{
SetDisconnected(Session.LookupSession(sessionID).SessionID);
}
}
isStopped_ = true;
OnStop();
thread_.Join(5000);
thread_ = null;
foreach (Session session in enabledSessions)
{
session.Logon();
}
}