Exemplo n.º 1
0
        /// <summary>
        ///     Performs a global backup action, copying all files in the SavesDirectory to the BackupDirectory.
        /// </summary>
        public static void Backup()
        {
            if (Busy)
            {
                ToConsole("Could not perform backup action, the service is busy.");
                return;
            }

            Busy = true;

            DateTime now = DateTime.UtcNow;

            ToConsole(String.Empty);
            ToConsole("Backup action started...");

            TryCatch(
                () =>
            {
                DateTime expire = DateTime.UtcNow.Subtract(TimeSpan.FromDays(3.0));

                Parallel.ForEach(
                    BackupDirectory.EnumerateDirectories(),
                    dir => TryCatch(
                        () =>
                {
                    if (dir.CreationTimeUtc < expire)
                    {
                        dir.Delete(true);
                    }
                }));
            });

            TryCatch(
                () =>
            {
                var target = IOUtility.EnsureDirectory(
                    BackupDirectory + "/" + DateTime.Now.ToSimpleString("D d M y - t@h-m@"), true);

                Parallel.ForEach(
                    SavesDirectory.EnumerateDirectories(),
                    dir =>
                    TryCatch(
                        () =>
                        dir.CopyDirectory(IOUtility.EnsureDirectory(dir.FullName.Replace(SavesDirectory.FullName, target.FullName)))));
            });

            if (OnBackup != null)
            {
                TryCatch(OnBackup, ToConsole);
            }

            Busy = false;

            double time = (DateTime.UtcNow - now).TotalSeconds;

            ToConsole("Backup action completed in {0:F2} second{1}", time, (time != 1) ? "s" : String.Empty);
        }
Exemplo n.º 2
0
        /// <summary>
        ///     Performs a global backup action, copying all files in the SavesDirectory to the BackupDirectory.
        /// </summary>
        public static void Backup()
        {
            if (Busy)
            {
                ToConsole("Could not perform backup action, the service is busy.");
                return;
            }

            Busy = true;

            var now = DateTime.UtcNow;

            try
            {
                ToConsole(String.Empty);
                ToConsole("Backup action started...");

                if (BackupExpireAge > TimeSpan.Zero)
                {
                    ToConsole("Backup Expire Age: {0}", BackupExpireAge);

                    lock (IOLock)
                    {
                        BackupDirectory.EmptyDirectory(BackupExpireAge);
                    }
                }

                lock (IOLock)
                {
                    SavesDirectory.CopyDirectory(
                        IOUtility.EnsureDirectory(BackupDirectory + "/" + DateTime.Now.ToSimpleString("D d M y"), true));
                }

                InvokeByPriority(OnBackup);
            }
            finally
            {
                Busy = false;
            }

            var time = (DateTime.UtcNow - now).TotalSeconds;

            ToConsole("Backup action completed in {0:F2} second{1}", time, (time != 1) ? "s" : String.Empty);
        }
Exemplo n.º 3
0
        /// <summary>
        ///     Performs a global backup action, copying all files in the SavesDirectory to the BackupDirectory.
        /// </summary>
        public static void Backup()
        {
            if (Busy)
            {
                ToConsole("Could not perform backup action, the service is busy.");
                return;
            }

            Busy = true;

            DateTime now = DateTime.UtcNow;

            ToConsole(String.Empty);
            ToConsole("Backup action started...");

            SavesDirectory.CopyDirectory(
                IOUtility.EnsureDirectory(BackupDirectory + "/" + DateTime.Now.ToSimpleString("D d M y"), true));

            if (_ExpireThread != null)
            {
                TryCatch(_ExpireThread.Abort);
                _ExpireThread = null;
            }

            _ExpireThread = new Thread(FlushExpired)
            {
                Name     = "Backup Expire Flush",
                Priority = ThreadPriority.BelowNormal
            };
            _ExpireThread.Start();

            if (OnBackup != null)
            {
                TryCatch(OnBackup, ToConsole);
            }

            Busy = false;

            double time = (DateTime.UtcNow - now).TotalSeconds;

            ToConsole("Backup action completed in {0:F2} second{1}", time, (time != 1) ? "s" : String.Empty);
        }