Esempio n. 1
0
        public static LogicSession GetLogicSession(CookieMemory cookie)
        {
            string       sessionId    = cookie.SessionId;
            DateTime     updateTime   = cookie.UpdateTime;
            LogicSession logicSession = null;
            LogicSession lgcSession   = null;
            object       lockObj      = AuthUtils._lockObj;
            LogicSession result;

            lock (lockObj)
            {
                bool local_5_;
                do
                {
                    bool flag2 = !AuthUtils.GlobalLogicSession.TryGetValue(sessionId, out lgcSession);
                    if (flag2)
                    {
                        lgcSession = new LogicSession(sessionId);
                        AuthUtils.GlobalLogicSession[sessionId] = lgcSession;
                    }
                    local_5_ = Monitor.TryEnter(lgcSession);
                    bool flag3 = !local_5_;
                    if (flag3)
                    {
                        Thread.Sleep(0);
                    }
                }while (!local_5_);
                try
                {
                    DateTime local_6 = AppRuntime.ServerDateTime;
                    bool     flag4   = lgcSession.LoginType == LogicSessionType.N && !AuthUtils.SelectAuthToSession(sessionId, lgcSession);
                    if (flag4)
                    {
                        lgcSession.Ignore = true;
                        result            = null;
                        return(result);
                    }
                    bool flag5 = lgcSession.LastRequestTime < AppRuntime.ServerDateTime.AddMinutes(-480.0) && !AuthUtils.UpdateAuthLastRequest(sessionId, local_6);
                    if (flag5)
                    {
                        lgcSession.Ignore = true;
                        result            = null;
                        return(result);
                    }
                    bool flag6 = updateTime > lgcSession.UpdateTime && !AuthUtils.SelectAuthToSession(sessionId, lgcSession);
                    if (flag6)
                    {
                        lgcSession.Ignore = true;
                        result            = null;
                        return(result);
                    }
                    lgcSession.LastRequestTime = local_6;
                    logicSession = lgcSession;
                }
                finally
                {
                    Monitor.Exit(lgcSession);
                }
            }
            result = logicSession;
            return(result);
        }