InvokeWorldSave() public static méthode

public static InvokeWorldSave ( WorldSaveEventArgs e ) : void
e WorldSaveEventArgs
Résultat void
        public static void Save(bool message)
        {
            object[] objArray1;
            if (World.m_Saving || (AsyncWriter.ThreadCount > 0))
            {
                return;
            }
            World.m_Saving = true;
            if (message)
            {
                World.Broadcast(53, true, "The world is saving, please wait.");
            }
            Console.Write("World: Saving...");
            DateTime time1 = DateTime.Now;

            if (!Directory.Exists("Saves/Mobiles/"))
            {
                Directory.CreateDirectory("Saves/Mobiles/");
            }
            if (!Directory.Exists("Saves/Items/"))
            {
                Directory.CreateDirectory("Saves/Items/");
            }
            if (!Directory.Exists("Saves/Guilds/"))
            {
                Directory.CreateDirectory("Saves/Guilds/");
            }
            if (!Directory.Exists("Saves/Regions/"))
            {
                Directory.CreateDirectory("Saves/Regions/");
            }
            World.SaveMobiles();
            World.SaveItems();
            World.SaveGuilds();
            World.SaveRegions();
            try
            {
                EventSink.InvokeWorldSave(new WorldSaveEventArgs(message));
            }
            catch (Exception exception1)
            {
                throw new Exception("World Save event threw an exception.  Save failed!", exception1);
            }
            GC.Collect();
            DateTime time2 = DateTime.Now;
            TimeSpan span1 = ((TimeSpan)(time2 - time1));

            Console.WriteLine("done in {0:F1} seconds.", span1.TotalSeconds);
            if (message)
            {
                objArray1    = new object[1];
                span1        = ((TimeSpan)(time2 - time1));
                objArray1[0] = span1.TotalSeconds;
                World.Broadcast(53, true, "World save complete. The entire process took {0:F1} seconds.", objArray1);
            }
            World.m_Saving = false;
        }
Exemple #2
0
		public static void Save( bool message ) {
			if ( m_Saving || AsyncWriter.ThreadCount > 0 )
				return;

			NetState.FlushAll();
			NetState.Pause();

			m_Saving = true;

			if ( message )
				Broadcast( 0x35, true, "The world is saving, please wait." );

			SaveStrategy strategy = SaveStrategy.Acquire();
			Console.WriteLine( "Core: Using {0} save strategy", strategy.Name.ToLowerInvariant() );

			Console.Write( "World: Saving..." );

			Stopwatch watch = Stopwatch.StartNew();

			if ( !Directory.Exists( "Saves/Mobiles/" ) )
				Directory.CreateDirectory( "Saves/Mobiles/" );
			if ( !Directory.Exists( "Saves/Items/" ) )
				Directory.CreateDirectory( "Saves/Items/" );
			if ( !Directory.Exists( "Saves/Guilds/" ) )
				Directory.CreateDirectory( "Saves/Guilds/" );


			/*using ( SaveMetrics metrics = new SaveMetrics() ) {*/
			strategy.Save( null );
			/*}*/

			try {
				EventSink.InvokeWorldSave( new WorldSaveEventArgs( message ) );
			} catch ( Exception e ) {
				throw new Exception( "World Save event threw an exception.  Save failed!", e );
			}

			watch.Stop();

			m_Saving = false;

			ProcessSafetyQueues();

			strategy.ProcessDecay();

			Console.WriteLine( "done in {0:F2} seconds.", watch.Elapsed.TotalSeconds );

			if ( message )
				Broadcast( 0x35, true, "World save complete. The entire process took {0:F1} seconds.", watch.Elapsed.TotalSeconds );

			NetState.Resume();
		}
Exemple #3
0
        public static void Save(bool message = true, bool permitBackgroundWrite = false)
        {
            if (Saving)
            {
                return;
            }

            GameServer.Instance.Clients.Each(c => c.Flush());

            WaitForWriteCompletion();             // Blocks Save until current disk flush is done.

            Saving = true;

            m_DiskWriteHandle.Reset();

            if (message)
            {
                Broadcast(0x35, true, "The world is saving, please wait.");
            }

            log.Info("Save started");

            var strategy = SaveStrategy.Acquire();

            log.Info("Using {0} save strategy", strategy.Name.ToLowerInvariant());

            var watch = Stopwatch.StartNew();

            try
            {
                EventSink.InvokeWorldBeforeSave();
            }
            catch (Exception e)
            {
                throw new Exception("World Before Save event threw an exception. Save failed!", e);
            }

            if (!Directory.Exists(MobileBasePath))
            {
                Directory.CreateDirectory(MobileBasePath);
            }
            if (!Directory.Exists(ItemBasePath))
            {
                Directory.CreateDirectory(ItemBasePath);
            }
            if (!Directory.Exists(GuildBasePath))
            {
                Directory.CreateDirectory(GuildBasePath);
            }

            strategy.Save(permitBackgroundWrite);

            log.Info("Entities saved in {0:F2} seconds.", watch.Elapsed.TotalSeconds);

            try
            {
                EventSink.InvokeWorldSave(new WorldSaveEventArgs(message));
            }
            catch (Exception e)
            {
                throw new Exception("World Save event threw an exception. Save failed!", e);
            }

            if (ManualGC)
            {
                GC.Collect();
            }

            watch.Stop();

            Saving = false;

            if (!permitBackgroundWrite)
            {
                NotifyDiskWriteComplete();                 // Sets the DiskWriteHandle. If we allow background writes, we leave this upto the individual save strategies.
            }
            ProcessSafetyQueues();

            strategy.OnFinished();

            log.Info("Save done in {0:F2} seconds.", watch.Elapsed.TotalSeconds);

            if (message)
            {
                Broadcast(0x35, true, "World save complete. The entire process took {0:F2} seconds.", watch.Elapsed.TotalSeconds);
            }
        }
Exemple #4
0
        public static void Save(bool message, bool permitBackgroundWrite)
        {
            if (m_Saving)
            {
                return;
            }

            ++m_Saves;

            NetState.FlushAll();
            NetState.Pause();

            World.WaitForWriteCompletion();//Blocks Save until current disk flush is done.

            m_Saving = true;

            m_DiskWriteHandle.Reset();

            if (message)
            {
                Broadcast(0x35, true, "The world is saving, please wait.");
            }

            SaveStrategy strategy = SaveStrategy.Acquire();

            Console.WriteLine("Core: Using {0} save strategy", strategy.Name.ToLowerInvariant());

            Console.Write("World: Saving...");

            Stopwatch watch = Stopwatch.StartNew();

            if (!Directory.Exists("Saves/Mobiles/"))
            {
                Directory.CreateDirectory("Saves/Mobiles/");
            }

            if (!Directory.Exists("Saves/Items/"))
            {
                Directory.CreateDirectory("Saves/Items/");
            }



            /*using ( SaveMetrics metrics = new SaveMetrics() ) {*/
            strategy.Save(null, permitBackgroundWrite);
            /*}*/

            try
            {
                EventSink.InvokeWorldSave(new WorldSaveEventArgs(message));
            }
            catch (Exception e)
            {
                throw new Exception("World Save event threw an exception.  Save failed!", e);
            }

            watch.Stop();

            m_Saving = false;

            if (!permitBackgroundWrite)
            {
                World.NotifyDiskWriteComplete();        //Sets the DiskWriteHandle.  If we allow background writes, we leave this upto the individual save strategies.
            }
            ProcessSafetyQueues();

            strategy.ProcessDecay();

            Console.WriteLine("Save done in {0:F2} seconds.", watch.Elapsed.TotalSeconds);

            if (message)
            {
                Broadcast(0x35, true, "World save complete. The entire process took {0:F1} seconds.", watch.Elapsed.TotalSeconds);
            }

            NetState.Resume();
        }
Exemple #5
0
        public static void Save(bool message)
        {
            if (m_Saving || AsyncWriter.ThreadCount > 0)
            {
                return;
            }

            NetState.FlushAll();

            m_Saving = true;

            if (message)
            {
                Broadcast(0x35, true, "The world is saving, please wait.");
            }

            Console.Write("World: Saving...");

            DateTime startTime = DateTime.Now;

            if (!Directory.Exists("Saves/Mobiles/"))
            {
                Directory.CreateDirectory("Saves/Mobiles/");
            }
            if (!Directory.Exists("Saves/Items/"))
            {
                Directory.CreateDirectory("Saves/Items/");
            }
            if (!Directory.Exists("Saves/Guilds/"))
            {
                Directory.CreateDirectory("Saves/Guilds/");
            }
            if (!Directory.Exists("Saves/Regions/"))
            {
                Directory.CreateDirectory("Saves/Regions/");
            }

            if (m_MultiProcessor)
            {
                Thread saveThread = new Thread(new ThreadStart(SaveItems));

                saveThread.Name = "Item Save Subset";
                saveThread.Start();

                SaveMobiles();
                SaveGuilds();
                SaveRegions();

                saveThread.Join();
            }
            else
            {
                SaveMobiles();
                SaveItems();
                SaveGuilds();
                SaveRegions();
            }

            //Accounts.Save();

            try
            {
                EventSink.InvokeWorldSave(new WorldSaveEventArgs(message));
            }
            catch (Exception e)
            {
                throw new Exception("World Save event threw an exception.  Save failed!", e);
            }

            //System.GC.Collect();

            DateTime endTime = DateTime.Now;

            Console.WriteLine("done in {0:F1} seconds.", (endTime - startTime).TotalSeconds);

            if (message)
            {
                Broadcast(0x35, true, "World save complete. The entire process took {0:F1} seconds.", (endTime - startTime).TotalSeconds);
            }

            m_Saving = false;
        }
Exemple #6
0
        public static void Save(bool message)
        {
            if (m_Saving || AsyncWriter.ThreadCount > 0)
            {
                return;
            }

            NetState.FlushAll();

            m_Saving = true;

            if (message)
            {
                Broadcast(0x35, true, "The world is saving, please wait.");
            }

            log.Info("Saving world");

            DateTime startTime = DateTime.Now;

            if (!Directory.Exists(mobileBase))
            {
                Directory.CreateDirectory(mobileBase);
            }
            if (!Directory.Exists(itemBase))
            {
                Directory.CreateDirectory(itemBase);
            }
            if (!Directory.Exists(guildBase))
            {
                Directory.CreateDirectory(guildBase);
            }
            if (!Directory.Exists(regionBase))
            {
                Directory.CreateDirectory(regionBase);
            }

            if (Core.Config.Features["multi-threading"])
            {
                Thread saveThread = new Thread(new ThreadStart(SaveItems));

                saveThread.Name = "Item Save Subset";
                saveThread.Start();

                SaveMobiles();
                SaveGuilds();
                SaveRegions();

                saveThread.Join();
            }
            else
            {
                SaveMobiles();
                SaveItems();
                SaveGuilds();
                SaveRegions();
            }

            //Accounts.Save();

            try
            {
                EventSink.InvokeWorldSave(new WorldSaveEventArgs(message));
            }
            catch (Exception e)
            {
                throw new Exception("World Save event threw an exception.  Save failed!", e);
            }

            //System.GC.Collect();

            DateTime endTime = DateTime.Now;

            log.Info(String.Format("World saved in {0:F1} seconds.",
                                   (endTime - startTime).TotalSeconds));

            if (message)
            {
                Broadcast(0x35, true, "World save complete. The entire process took {0:F1} seconds.", (endTime - startTime).TotalSeconds);
            }

            m_Saving = false;
        }
Exemple #7
0
        public static void Save(bool message, bool permitBackgroundWrite)
        {
            if (Saving)
            {
                return;
            }

            ++m_Saves;

            NetState.FlushAll();
            NetState.Pause();

            WaitForWriteCompletion(); //Blocks Save until current disk flush is done.

            Saving = true;

            m_DiskWriteHandle.Reset();

            if (message)
            {
                Broadcast(0x35, false, AccessLevel.Player, "The world is saving, please wait.");
            }

            SaveStrategy strategy = SaveStrategy.Acquire();

            Console.WriteLine("Core: Using {0} save strategy", strategy.Name.ToLowerInvariant());

            Console.WriteLine("World: Saving...");

            Stopwatch watch = Stopwatch.StartNew();

            if (!Directory.Exists("Saves/Mobiles/"))
            {
                Directory.CreateDirectory("Saves/Mobiles/");
            }
            if (!Directory.Exists("Saves/Items/"))
            {
                Directory.CreateDirectory("Saves/Items/");
            }
            if (!Directory.Exists("Saves/Guilds/"))
            {
                Directory.CreateDirectory("Saves/Guilds/");
            }


            try
            {
                EventSink.InvokeBeforeWorldSave(new BeforeWorldSaveEventArgs());
            }
            catch (Exception e)
            {
                throw new Exception("FATAL: Exception in EventSink.BeforeWorldSave", e);
            }

            if (m_Metrics)
            {
                using (SaveMetrics metrics = new SaveMetrics())
                    strategy.Save(metrics, permitBackgroundWrite);
            }
            else
            {
                strategy.Save(null, permitBackgroundWrite);
            }

            try
            {
                EventSink.InvokeWorldSave(new WorldSaveEventArgs(message));
            }
            catch (Exception e)
            {
                throw new Exception("FATAL: Exception in EventSink.WorldSave", e);
            }

            watch.Stop();

            Saving = false;

            if (!permitBackgroundWrite)
            {
                NotifyDiskWriteComplete();
                //Sets the DiskWriteHandle.  If we allow background writes, we leave this upto the individual save strategies.
            }

            ProcessSafetyQueues();

            strategy.ProcessDecay();

            Console.WriteLine("Save finished in {0:F2} seconds.", watch.Elapsed.TotalSeconds);

            if (message)
            {
                Broadcast(0x35, false, AccessLevel.Player, "World save done in {0:F1} seconds.", watch.Elapsed.TotalSeconds);
            }

            NetState.Resume();

            try
            {
                EventSink.InvokeAfterWorldSave(new AfterWorldSaveEventArgs());
            }
            catch (Exception e)
            {
                throw new Exception("FATAL: Exception in EventSink.AfterWorldSave", e);
            }
        }
Exemple #8
0
        public static void Save(string saveDirectory, bool message)
        {
            if (m_Saving || AsyncWriter.ThreadCount > 0)
            {
                return;
            }

            NetState.FlushAll();

            m_Saving = true;

            if (message)
            {
                Broadcast(0x35, true, "The world is saving, please wait.");
            }

            log.Info("Saving world");

            DateTime startTime = DateTime.Now;

            string mobileBase = Path.Combine(saveDirectory, "Mobiles");
            string itemBase   = Path.Combine(saveDirectory, "Items");
            string guildBase  = Path.Combine(saveDirectory, "Guilds");
            string regionBase = Path.Combine(saveDirectory, "Regions");

            if (Core.Config.Features["multi-threading"])
            {
                Thread saveThread = new Thread(new ThreadStart(new SaveItemsStart(itemBase).SaveItems));

                saveThread.Name = "Item Save Subset";
                saveThread.Start();

                SaveMobiles(mobileBase);
                SaveGuilds(guildBase);
                SaveRegions(regionBase);

                saveThread.Join();
            }
            else
            {
                SaveMobiles(mobileBase);
                SaveItems(itemBase);
                SaveGuilds(guildBase);
                SaveRegions(regionBase);
            }

            log.InfoFormat("Entities saved in {0:F1} seconds.",
                           (DateTime.Now - startTime).TotalSeconds);

            //Accounts.Save();

            try
            {
                EventSink.InvokeWorldSave(new WorldSaveEventArgs(saveDirectory, message));
            }
            catch (Exception e)
            {
                throw new Exception("World Save event threw an exception.  Save failed!", e);
            }

            if (ManualGC)
            {
                log.Debug("Manual garbage collection");
                System.GC.Collect();
            }

            DateTime endTime = DateTime.Now;

            log.InfoFormat("World saved in {0:F1} seconds.",
                           (endTime - startTime).TotalSeconds);

            if (message)
            {
                Broadcast(0x35, true, "World save complete. The entire process took {0:F1} seconds.", (endTime - startTime).TotalSeconds);
            }

            m_Saving = false;
        }