Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
                }
            }
        }
Exemplo n.º 4
0
        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);
                });
            }
        }