示例#1
0
        private static void Execute()
        {
            DateTime now     = DateTime.Now;
            TimeSpan timeout = Initializer.SessionConfig.Timeout.Add(TimeSpan.FromMinutes(5)); // 多加 5 分钟

            StringBuilder s = new StringBuilder();

            foreach (string filePath in Directory.GetFiles(Initializer.TempPath, "*.dat"))
            {
                if (File.Exists(filePath) == false)
                {
                    continue;
                }

                FileInfo file = new FileInfo(filePath);

                bool delete = file.LastAccessTime.Add(timeout) < now;

                if (delete)
                {
                    s.AppendLine(filePath);
                    RetryFile.Delete(filePath);

                    // 删除内存中的用户锁对象,以免内存泄露
                    string sessionId = FileStore.GetSessionId(filePath);
                    UserLock.XInstance.RemoveLock(sessionId);
                }
            }

            if (s.Length > 0)
            {
                string message = "XSession.Modules.FileCleanTask 已清理文件:\r\n" + s.ToString();
                WinLogger.WriteInfo(message);
            }
        }
示例#2
0
        public static void DeleteFile(string sessionId)
        {
            string filePath = GetSessionFilePath(sessionId);

            object lockObject = SidLock.Instance.GetLock(sessionId);

            lock ( lockObject ) {
                if (File.Exists(filePath))
                {
                    RetryFile.Delete(filePath);
                }
            }

            SidLock.Instance.RemoveLock(sessionId);
        }
示例#3
0
        public static void SaveToFile(byte[] bytes, string sessionId)
        {
            if (bytes == null)
            {
                return;
            }

            string filePath = GetSessionFilePath(sessionId);

            object lockObject = SidLock.Instance.GetLock(sessionId);

            lock ( lockObject ) {
                RetryFile.Write(filePath, bytes);
                File.SetLastAccessTime(filePath, DateTime.Now);
            }
        }
示例#4
0
        public static byte[] ReadFile(string sessionId, bool checkTimeout)
        {
            string filePath = GetSessionFilePath(sessionId);

            object lockObject = SidLock.Instance.GetLock(sessionId);

            lock ( lockObject ) {
                if (File.Exists(filePath))
                {
                    DateTime now = DateTime.Now;

                    if (checkTimeout)
                    {
                        // 从文件加载时,检查数据是否已过期
                        DateTime time = File.GetLastAccessTime(filePath);

                        // Session数据已过期
                        if (time.Add(Initializer.SessionConfig.Timeout) < now)
                        {
                            return(null);
                        }
                    }

                    byte[] bytes = RetryFile.Read(filePath);

                    if (checkTimeout)
                    {
                        File.SetLastAccessTime(filePath, now);
                    }

                    return(bytes);
                }
                else
                {
                    return(null);
                }
            }
        }