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); } }
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); }
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); } }
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); } } }