/// <summary> /// Close an existing session. /// </summary> /// <param name="sessionID">The session ID which uniquly identify a given session.</param> public static void EndSession(Guid sessionID) { if (!CurrentSessionList.ContainsKey(sessionID)) { return; } lock (_syncHelper) { CurrentCallbackList.Remove(sessionID); CurrentSessionList.Remove(sessionID); } }
/// <summary> /// Start a new session. /// </summary> /// <param name="clientInfo">The client information regarding the current session.</param> /// <returns>The session ID in the form of Guid.</returns> public static Guid StartSession(SessionClientInfo clientInfo) { Guid sessionID = Guid.NewGuid(); ISessionCallback callback = OperationContext.Current.GetCallbackChannel <ISessionCallback>(); SessionInfo sesionInfo = new SessionInfo() { SessionID = sessionID, StartTime = DateTime.Now, LastActivityTime = DateTime.Now, ClientInfo = clientInfo }; lock (_syncHelper) { CurrentSessionList.Add(sessionID, sesionInfo); CurrentCallbackList.Add(sessionID, callback); } return(sessionID); }
/// <summary> /// Kill one or more sessions. /// </summary> /// <param name="sessionIDs">The session ID list.</param> public static void KillSessions(IList <Guid> sessionIDs) { lock (_syncHelper) { foreach (Guid sessionID in sessionIDs) { if (!CurrentSessionList.ContainsKey(sessionID)) { continue; } SessionInfo sessionInfo = CurrentSessionList[sessionID]; CurrentSessionList.Remove(sessionID); CurrentCallbackList[sessionID].OnSessionKilled(sessionInfo); CurrentCallbackList.Remove(sessionID); } } }
private static void ClearSessions() { IList <Guid> sessionIDList = new List <Guid>(); foreach (SessionInfo sessionInfo in CurrentSessionList.Values) { if (sessionInfo.IsTimeout) { sessionIDList.Add(sessionInfo.SessionID); } } lock (_syncHelper) { Array.ForEach <Guid>(sessionIDList.ToArray <Guid>(), delegate(Guid sessionID) { CurrentSessionList.Remove(sessionID); CurrentCallbackList.Remove(sessionID); }); } }