From f741a62d540f0c04eedebd9c7eb072fc50c4a111 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Mon, 21 Apr 2008 09:12:47 +0000 Subject: * Formatted ExportSerialiserModule and SvnBackupModule * Added a form of GZip compression support to object.xml files produced by exportserialiser. Will look towards standard GZip support. File compression seems to be highly worthwhile reducing a 1.5mb sim state to 62kb. --- .../ExportSerialiser/ExportSerialisationModule.cs | 97 +++++++++++----------- .../Modules/ExportSerialiser/IFileSerialiser.cs | 4 +- .../Modules/ExportSerialiser/IRegionSerialiser.cs | 2 +- .../Modules/ExportSerialiser/SerialiseObjects.cs | 41 +++++---- .../Modules/ExportSerialiser/SerialiseTerrain.cs | 4 +- .../Modules/ModuleFramework/Commander.cs | 58 +++++++------ 6 files changed, 112 insertions(+), 94 deletions(-) (limited to 'OpenSim/Region/Environment/Modules') diff --git a/OpenSim/Region/Environment/Modules/ExportSerialiser/ExportSerialisationModule.cs b/OpenSim/Region/Environment/Modules/ExportSerialiser/ExportSerialisationModule.cs index f811f22..91770af 100644 --- a/OpenSim/Region/Environment/Modules/ExportSerialiser/ExportSerialisationModule.cs +++ b/OpenSim/Region/Environment/Modules/ExportSerialiser/ExportSerialisationModule.cs @@ -37,10 +37,54 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser { public class ExportSerialisationModule : IRegionModule, IRegionSerialiser { - private List m_regions = new List(); - private List m_serialisers = new List(); private Commander m_commander = new Commander("Export"); + private List m_regions = new List(); private string m_savedir = "exports" + "/"; + private List m_serialisers = new List(); + + #region IRegionModule Members + + public void Initialise(Scene scene, IConfigSource source) + { + scene.RegisterModuleCommander("Export", m_commander); + scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; + scene.RegisterModuleInterface(this); + + lock (m_regions) + { + m_regions.Add(scene); + } + } + + public void PostInitialise() + { + lock (m_serialisers) + { + m_serialisers.Add(new SerialiseTerrain()); + m_serialisers.Add(new SerialiseObjects()); + } + + LoadCommanderCommands(); + } + + public void Close() + { + m_regions.Clear(); + } + + public string Name + { + get { return "ExportSerialisationModule"; } + } + + public bool IsSharedModule + { + get { return true; } + } + + #endregion + + #region IRegionSerialiser Members public List SerialiseRegion(Scene scene, string saveDir) { @@ -76,22 +120,9 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser return results; } + #endregion - #region IRegionModule Members - - public void Initialise(Scene scene, IConfigSource source) - { - scene.RegisterModuleCommander("Export", m_commander); - scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; - scene.RegisterModuleInterface(this); - - lock (m_regions) - { - m_regions.Add(scene); - } - } - - void EventManager_OnPluginConsole(string[] args) + private void EventManager_OnPluginConsole(string[] args) { if (args[0] == "export") { @@ -108,7 +139,7 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser { foreach (Scene region in m_regions) { - if (region.RegionInfo.RegionName == (string)args[0]) + if (region.RegionInfo.RegionName == (string) args[0]) { List results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/"); } @@ -133,33 +164,5 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser m_commander.RegisterCommand("save", serialiseSceneCommand); m_commander.RegisterCommand("save-all", serialiseAllScenesCommand); } - - public void PostInitialise() - { - lock (m_serialisers) - { - m_serialisers.Add(new SerialiseTerrain()); - m_serialisers.Add(new SerialiseObjects()); - } - - LoadCommanderCommands(); - } - - public void Close() - { - m_regions.Clear(); - } - - public string Name - { - get { return "ExportSerialisationModule"; } - } - - public bool IsSharedModule - { - get { return true; } - } - - #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/ExportSerialiser/IFileSerialiser.cs b/OpenSim/Region/Environment/Modules/ExportSerialiser/IFileSerialiser.cs index 8cd97a8..77a418f 100644 --- a/OpenSim/Region/Environment/Modules/ExportSerialiser/IFileSerialiser.cs +++ b/OpenSim/Region/Environment/Modules/ExportSerialiser/IFileSerialiser.cs @@ -29,8 +29,8 @@ using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.Environment.Modules.ExportSerialiser { - interface IFileSerialiser + internal interface IFileSerialiser { string WriteToFile(Scene scene, string dir); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/ExportSerialiser/IRegionSerialiser.cs b/OpenSim/Region/Environment/Modules/ExportSerialiser/IRegionSerialiser.cs index 5b10957..e1721ff 100644 --- a/OpenSim/Region/Environment/Modules/ExportSerialiser/IRegionSerialiser.cs +++ b/OpenSim/Region/Environment/Modules/ExportSerialiser/IRegionSerialiser.cs @@ -34,4 +34,4 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser { List SerialiseRegion(Scene scene, string saveDir); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/ExportSerialiser/SerialiseObjects.cs b/OpenSim/Region/Environment/Modules/ExportSerialiser/SerialiseObjects.cs index ac80f40..7e5cf47 100644 --- a/OpenSim/Region/Environment/Modules/ExportSerialiser/SerialiseObjects.cs +++ b/OpenSim/Region/Environment/Modules/ExportSerialiser/SerialiseObjects.cs @@ -27,20 +27,30 @@ using System.Collections.Generic; using System.IO; +using System.IO.Compression; using System.Text; using System.Xml; using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.Environment.Modules.ExportSerialiser { - class SerialiseObjects : IFileSerialiser + internal class SerialiseObjects : IFileSerialiser { #region IFileSerialiser Members + public string WriteToFile(Scene scene, string dir) + { + string targetFileName = dir + "objects.xml"; + + SaveSerialisedToFile(targetFileName, scene); + + return "objects.xml"; + } + + #endregion public void SaveSerialisedToFile(string fileName, Scene scene) { - int primCount = 0; string xmlstream = ""; List EntityList = scene.GetEntities(); @@ -50,8 +60,7 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser { if (ent is SceneObjectGroup) { - EntityXml.Add(((SceneObjectGroup)ent).ToXmlString2()); - primCount++; + EntityXml.Add(((SceneObjectGroup) ent).ToXmlString2()); } } EntityXml.Sort(); @@ -69,26 +78,24 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser formatter.Formatting = Formatting.Indented; doc.WriteContentTo(formatter); formatter.Flush(); - StreamReader reader = new StreamReader(stream); stream.Seek(0, SeekOrigin.Begin); FileStream objectsFile = new FileStream(fileName, FileMode.Create); + stream.WriteTo(objectsFile); objectsFile.Flush(); objectsFile.Close(); + #region GZip Compressed Version + FileStream objectsFileCompressed = new FileStream(fileName + ".gzs", FileMode.Create); + MemoryStream gzipMSStream = new MemoryStream(); + GZipStream gzipStream = new GZipStream(gzipMSStream, CompressionMode.Compress); + stream.WriteTo(gzipStream); + gzipMSStream.WriteTo(objectsFileCompressed); + objectsFileCompressed.Flush(); + objectsFileCompressed.Close(); + #endregion } - - public string WriteToFile(Scene scene, string dir) - { - string targetFileName = dir + "objects.xml"; - - SaveSerialisedToFile(targetFileName, scene); - - return "objects.xml"; - } - - #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/ExportSerialiser/SerialiseTerrain.cs b/OpenSim/Region/Environment/Modules/ExportSerialiser/SerialiseTerrain.cs index 8555089..c4790c2 100644 --- a/OpenSim/Region/Environment/Modules/ExportSerialiser/SerialiseTerrain.cs +++ b/OpenSim/Region/Environment/Modules/ExportSerialiser/SerialiseTerrain.cs @@ -31,7 +31,7 @@ using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.Environment.Modules.ExportSerialiser { - class SerialiseTerrain : IFileSerialiser + internal class SerialiseTerrain : IFileSerialiser { #region IFileSerialiser Members @@ -50,4 +50,4 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/ModuleFramework/Commander.cs b/OpenSim/Region/Environment/Modules/ModuleFramework/Commander.cs index 27d73b5..7ef087d 100644 --- a/OpenSim/Region/Environment/Modules/ModuleFramework/Commander.cs +++ b/OpenSim/Region/Environment/Modules/ModuleFramework/Commander.cs @@ -42,11 +42,11 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework public class Command : ICommand { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private List m_args = new List(); private Action m_command; - private string m_name; private string m_help; - private List m_args = new List(); + private string m_name; public Command(string name, Action command, string help) { @@ -55,6 +55,8 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework m_help = help; } + #region ICommand Members + public void AddArgument(string name, string helptext, string type) { m_args.Add(new CommandArgument(name, helptext, type)); @@ -143,8 +145,8 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework catch (FormatException) { m_log.Error("Argument number " + (i + 1) + - " (" + m_args[i].Name + ") must be a valid " + - m_args[i].ArgumentType.ToLower() + "."); + " (" + m_args[i].Name + ") must be a valid " + + m_args[i].ArgumentType.ToLower() + "."); } cleanArgs[i] = m_args[i].ArgumentValue; @@ -153,6 +155,8 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework m_command.Invoke(cleanArgs); } + + #endregion } /// @@ -160,8 +164,8 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework /// public class CommandArgument { - private string m_name; private string m_help; + private string m_name; private string m_type; private Object m_val; @@ -208,29 +212,13 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework m_name = name; } + #region ICommander Members + public void RegisterCommand(string commandName, ICommand command) { m_commands[commandName] = command; } - void ShowConsoleHelp() - { - m_log.Info("===" + m_name + "==="); - foreach (ICommand com in m_commands.Values) - { - m_log.Info("* " + com.Name + " - " + com.Help); - } - } - - string EscapeRuntimeAPICommand(string command) - { - command = command.Replace('-', '_'); - StringBuilder tmp = new StringBuilder(command); - tmp[0] = tmp[0].ToString().ToUpper().ToCharArray()[0]; - - return tmp.ToString(); - } - /// /// Generates a runtime C# class which can be compiled and inserted via reflection to enable modules to register new script commands /// @@ -253,7 +241,7 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework { classSrc += "\t\targs[" + i.ToString() + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n"; i++; - } + } classSrc += "\t\tGetCommander(\"" + m_name + "\").Run(\"" + com.Name + "\", args);\n"; classSrc += "\t}\n"; } @@ -296,5 +284,25 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework ShowConsoleHelp(); } } + + #endregion + + private void ShowConsoleHelp() + { + m_log.Info("===" + m_name + "==="); + foreach (ICommand com in m_commands.Values) + { + m_log.Info("* " + com.Name + " - " + com.Help); + } + } + + private string EscapeRuntimeAPICommand(string command) + { + command = command.Replace('-', '_'); + StringBuilder tmp = new StringBuilder(command); + tmp[0] = tmp[0].ToString().ToUpper().ToCharArray()[0]; + + return tmp.ToString(); + } } -} +} \ No newline at end of file -- cgit v1.1