diff options
author | Adam Frisby | 2008-04-21 09:12:47 +0000 |
---|---|---|
committer | Adam Frisby | 2008-04-21 09:12:47 +0000 |
commit | f741a62d540f0c04eedebd9c7eb072fc50c4a111 (patch) | |
tree | f94ce4b084c538feb450dc5827358d231da37dbe /OpenSim/Region | |
parent | Update svn properties. (diff) | |
download | opensim-SC_OLD-f741a62d540f0c04eedebd9c7eb072fc50c4a111.zip opensim-SC_OLD-f741a62d540f0c04eedebd9c7eb072fc50c4a111.tar.gz opensim-SC_OLD-f741a62d540f0c04eedebd9c7eb072fc50c4a111.tar.bz2 opensim-SC_OLD-f741a62d540f0c04eedebd9c7eb072fc50c4a111.tar.xz |
* 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.
Diffstat (limited to 'OpenSim/Region')
7 files changed, 184 insertions, 163 deletions
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 | |||
37 | { | 37 | { |
38 | public class ExportSerialisationModule : IRegionModule, IRegionSerialiser | 38 | public class ExportSerialisationModule : IRegionModule, IRegionSerialiser |
39 | { | 39 | { |
40 | private List<Scene> m_regions = new List<Scene>(); | ||
41 | private List<IFileSerialiser> m_serialisers = new List<IFileSerialiser>(); | ||
42 | private Commander m_commander = new Commander("Export"); | 40 | private Commander m_commander = new Commander("Export"); |
41 | private List<Scene> m_regions = new List<Scene>(); | ||
43 | private string m_savedir = "exports" + "/"; | 42 | private string m_savedir = "exports" + "/"; |
43 | private List<IFileSerialiser> m_serialisers = new List<IFileSerialiser>(); | ||
44 | |||
45 | #region IRegionModule Members | ||
46 | |||
47 | public void Initialise(Scene scene, IConfigSource source) | ||
48 | { | ||
49 | scene.RegisterModuleCommander("Export", m_commander); | ||
50 | scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; | ||
51 | scene.RegisterModuleInterface<IRegionSerialiser>(this); | ||
52 | |||
53 | lock (m_regions) | ||
54 | { | ||
55 | m_regions.Add(scene); | ||
56 | } | ||
57 | } | ||
58 | |||
59 | public void PostInitialise() | ||
60 | { | ||
61 | lock (m_serialisers) | ||
62 | { | ||
63 | m_serialisers.Add(new SerialiseTerrain()); | ||
64 | m_serialisers.Add(new SerialiseObjects()); | ||
65 | } | ||
66 | |||
67 | LoadCommanderCommands(); | ||
68 | } | ||
69 | |||
70 | public void Close() | ||
71 | { | ||
72 | m_regions.Clear(); | ||
73 | } | ||
74 | |||
75 | public string Name | ||
76 | { | ||
77 | get { return "ExportSerialisationModule"; } | ||
78 | } | ||
79 | |||
80 | public bool IsSharedModule | ||
81 | { | ||
82 | get { return true; } | ||
83 | } | ||
84 | |||
85 | #endregion | ||
86 | |||
87 | #region IRegionSerialiser Members | ||
44 | 88 | ||
45 | public List<string> SerialiseRegion(Scene scene, string saveDir) | 89 | public List<string> SerialiseRegion(Scene scene, string saveDir) |
46 | { | 90 | { |
@@ -76,22 +120,9 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser | |||
76 | return results; | 120 | return results; |
77 | } | 121 | } |
78 | 122 | ||
123 | #endregion | ||
79 | 124 | ||
80 | #region IRegionModule Members | 125 | private void EventManager_OnPluginConsole(string[] args) |
81 | |||
82 | public void Initialise(Scene scene, IConfigSource source) | ||
83 | { | ||
84 | scene.RegisterModuleCommander("Export", m_commander); | ||
85 | scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; | ||
86 | scene.RegisterModuleInterface<IRegionSerialiser>(this); | ||
87 | |||
88 | lock (m_regions) | ||
89 | { | ||
90 | m_regions.Add(scene); | ||
91 | } | ||
92 | } | ||
93 | |||
94 | void EventManager_OnPluginConsole(string[] args) | ||
95 | { | 126 | { |
96 | if (args[0] == "export") | 127 | if (args[0] == "export") |
97 | { | 128 | { |
@@ -108,7 +139,7 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser | |||
108 | { | 139 | { |
109 | foreach (Scene region in m_regions) | 140 | foreach (Scene region in m_regions) |
110 | { | 141 | { |
111 | if (region.RegionInfo.RegionName == (string)args[0]) | 142 | if (region.RegionInfo.RegionName == (string) args[0]) |
112 | { | 143 | { |
113 | List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/"); | 144 | List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/"); |
114 | } | 145 | } |
@@ -133,33 +164,5 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser | |||
133 | m_commander.RegisterCommand("save", serialiseSceneCommand); | 164 | m_commander.RegisterCommand("save", serialiseSceneCommand); |
134 | m_commander.RegisterCommand("save-all", serialiseAllScenesCommand); | 165 | m_commander.RegisterCommand("save-all", serialiseAllScenesCommand); |
135 | } | 166 | } |
136 | |||
137 | public void PostInitialise() | ||
138 | { | ||
139 | lock (m_serialisers) | ||
140 | { | ||
141 | m_serialisers.Add(new SerialiseTerrain()); | ||
142 | m_serialisers.Add(new SerialiseObjects()); | ||
143 | } | ||
144 | |||
145 | LoadCommanderCommands(); | ||
146 | } | ||
147 | |||
148 | public void Close() | ||
149 | { | ||
150 | m_regions.Clear(); | ||
151 | } | ||
152 | |||
153 | public string Name | ||
154 | { | ||
155 | get { return "ExportSerialisationModule"; } | ||
156 | } | ||
157 | |||
158 | public bool IsSharedModule | ||
159 | { | ||
160 | get { return true; } | ||
161 | } | ||
162 | |||
163 | #endregion | ||
164 | } | 167 | } |
165 | } | 168 | } \ 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; | |||
29 | 29 | ||
30 | namespace OpenSim.Region.Environment.Modules.ExportSerialiser | 30 | namespace OpenSim.Region.Environment.Modules.ExportSerialiser |
31 | { | 31 | { |
32 | interface IFileSerialiser | 32 | internal interface IFileSerialiser |
33 | { | 33 | { |
34 | string WriteToFile(Scene scene, string dir); | 34 | string WriteToFile(Scene scene, string dir); |
35 | } | 35 | } |
36 | } | 36 | } \ 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 | |||
34 | { | 34 | { |
35 | List<string> SerialiseRegion(Scene scene, string saveDir); | 35 | List<string> SerialiseRegion(Scene scene, string saveDir); |
36 | } | 36 | } |
37 | } | 37 | } \ 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 @@ | |||
27 | 27 | ||
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using System.IO; | 29 | using System.IO; |
30 | using System.IO.Compression; | ||
30 | using System.Text; | 31 | using System.Text; |
31 | using System.Xml; | 32 | using System.Xml; |
32 | using OpenSim.Region.Environment.Scenes; | 33 | using OpenSim.Region.Environment.Scenes; |
33 | 34 | ||
34 | namespace OpenSim.Region.Environment.Modules.ExportSerialiser | 35 | namespace OpenSim.Region.Environment.Modules.ExportSerialiser |
35 | { | 36 | { |
36 | class SerialiseObjects : IFileSerialiser | 37 | internal class SerialiseObjects : IFileSerialiser |
37 | { | 38 | { |
38 | #region IFileSerialiser Members | 39 | #region IFileSerialiser Members |
39 | 40 | ||
41 | public string WriteToFile(Scene scene, string dir) | ||
42 | { | ||
43 | string targetFileName = dir + "objects.xml"; | ||
44 | |||
45 | SaveSerialisedToFile(targetFileName, scene); | ||
46 | |||
47 | return "objects.xml"; | ||
48 | } | ||
49 | |||
50 | #endregion | ||
40 | 51 | ||
41 | public void SaveSerialisedToFile(string fileName, Scene scene) | 52 | public void SaveSerialisedToFile(string fileName, Scene scene) |
42 | { | 53 | { |
43 | int primCount = 0; | ||
44 | string xmlstream = "<scene>"; | 54 | string xmlstream = "<scene>"; |
45 | 55 | ||
46 | List<EntityBase> EntityList = scene.GetEntities(); | 56 | List<EntityBase> EntityList = scene.GetEntities(); |
@@ -50,8 +60,7 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser | |||
50 | { | 60 | { |
51 | if (ent is SceneObjectGroup) | 61 | if (ent is SceneObjectGroup) |
52 | { | 62 | { |
53 | EntityXml.Add(((SceneObjectGroup)ent).ToXmlString2()); | 63 | EntityXml.Add(((SceneObjectGroup) ent).ToXmlString2()); |
54 | primCount++; | ||
55 | } | 64 | } |
56 | } | 65 | } |
57 | EntityXml.Sort(); | 66 | EntityXml.Sort(); |
@@ -69,26 +78,24 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser | |||
69 | formatter.Formatting = Formatting.Indented; | 78 | formatter.Formatting = Formatting.Indented; |
70 | doc.WriteContentTo(formatter); | 79 | doc.WriteContentTo(formatter); |
71 | formatter.Flush(); | 80 | formatter.Flush(); |
72 | StreamReader reader = new StreamReader(stream); | ||
73 | 81 | ||
74 | stream.Seek(0, SeekOrigin.Begin); | 82 | stream.Seek(0, SeekOrigin.Begin); |
75 | 83 | ||
76 | FileStream objectsFile = new FileStream(fileName, FileMode.Create); | 84 | FileStream objectsFile = new FileStream(fileName, FileMode.Create); |
85 | |||
77 | stream.WriteTo(objectsFile); | 86 | stream.WriteTo(objectsFile); |
78 | objectsFile.Flush(); | 87 | objectsFile.Flush(); |
79 | objectsFile.Close(); | 88 | objectsFile.Close(); |
80 | 89 | ||
90 | #region GZip Compressed Version | ||
91 | FileStream objectsFileCompressed = new FileStream(fileName + ".gzs", FileMode.Create); | ||
92 | MemoryStream gzipMSStream = new MemoryStream(); | ||
93 | GZipStream gzipStream = new GZipStream(gzipMSStream, CompressionMode.Compress); | ||
94 | stream.WriteTo(gzipStream); | ||
95 | gzipMSStream.WriteTo(objectsFileCompressed); | ||
96 | objectsFileCompressed.Flush(); | ||
97 | objectsFileCompressed.Close(); | ||
98 | #endregion | ||
81 | } | 99 | } |
82 | |||
83 | public string WriteToFile(Scene scene, string dir) | ||
84 | { | ||
85 | string targetFileName = dir + "objects.xml"; | ||
86 | |||
87 | SaveSerialisedToFile(targetFileName, scene); | ||
88 | |||
89 | return "objects.xml"; | ||
90 | } | ||
91 | |||
92 | #endregion | ||
93 | } | 100 | } |
94 | } | 101 | } \ 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; | |||
31 | 31 | ||
32 | namespace OpenSim.Region.Environment.Modules.ExportSerialiser | 32 | namespace OpenSim.Region.Environment.Modules.ExportSerialiser |
33 | { | 33 | { |
34 | class SerialiseTerrain : IFileSerialiser | 34 | internal class SerialiseTerrain : IFileSerialiser |
35 | { | 35 | { |
36 | #region IFileSerialiser Members | 36 | #region IFileSerialiser Members |
37 | 37 | ||
@@ -50,4 +50,4 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser | |||
50 | 50 | ||
51 | #endregion | 51 | #endregion |
52 | } | 52 | } |
53 | } | 53 | } \ 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 | |||
42 | public class Command : ICommand | 42 | public class Command : ICommand |
43 | { | 43 | { |
44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
45 | private List<CommandArgument> m_args = new List<CommandArgument>(); | ||
45 | 46 | ||
46 | private Action<object[]> m_command; | 47 | private Action<object[]> m_command; |
47 | private string m_name; | ||
48 | private string m_help; | 48 | private string m_help; |
49 | private List<CommandArgument> m_args = new List<CommandArgument>(); | 49 | private string m_name; |
50 | 50 | ||
51 | public Command(string name, Action<Object[]> command, string help) | 51 | public Command(string name, Action<Object[]> command, string help) |
52 | { | 52 | { |
@@ -55,6 +55,8 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework | |||
55 | m_help = help; | 55 | m_help = help; |
56 | } | 56 | } |
57 | 57 | ||
58 | #region ICommand Members | ||
59 | |||
58 | public void AddArgument(string name, string helptext, string type) | 60 | public void AddArgument(string name, string helptext, string type) |
59 | { | 61 | { |
60 | m_args.Add(new CommandArgument(name, helptext, type)); | 62 | m_args.Add(new CommandArgument(name, helptext, type)); |
@@ -143,8 +145,8 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework | |||
143 | catch (FormatException) | 145 | catch (FormatException) |
144 | { | 146 | { |
145 | m_log.Error("Argument number " + (i + 1) + | 147 | m_log.Error("Argument number " + (i + 1) + |
146 | " (" + m_args[i].Name + ") must be a valid " + | 148 | " (" + m_args[i].Name + ") must be a valid " + |
147 | m_args[i].ArgumentType.ToLower() + "."); | 149 | m_args[i].ArgumentType.ToLower() + "."); |
148 | } | 150 | } |
149 | cleanArgs[i] = m_args[i].ArgumentValue; | 151 | cleanArgs[i] = m_args[i].ArgumentValue; |
150 | 152 | ||
@@ -153,6 +155,8 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework | |||
153 | 155 | ||
154 | m_command.Invoke(cleanArgs); | 156 | m_command.Invoke(cleanArgs); |
155 | } | 157 | } |
158 | |||
159 | #endregion | ||
156 | } | 160 | } |
157 | 161 | ||
158 | /// <summary> | 162 | /// <summary> |
@@ -160,8 +164,8 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework | |||
160 | /// </summary> | 164 | /// </summary> |
161 | public class CommandArgument | 165 | public class CommandArgument |
162 | { | 166 | { |
163 | private string m_name; | ||
164 | private string m_help; | 167 | private string m_help; |
168 | private string m_name; | ||
165 | private string m_type; | 169 | private string m_type; |
166 | private Object m_val; | 170 | private Object m_val; |
167 | 171 | ||
@@ -208,29 +212,13 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework | |||
208 | m_name = name; | 212 | m_name = name; |
209 | } | 213 | } |
210 | 214 | ||
215 | #region ICommander Members | ||
216 | |||
211 | public void RegisterCommand(string commandName, ICommand command) | 217 | public void RegisterCommand(string commandName, ICommand command) |
212 | { | 218 | { |
213 | m_commands[commandName] = command; | 219 | m_commands[commandName] = command; |
214 | } | 220 | } |
215 | 221 | ||
216 | void ShowConsoleHelp() | ||
217 | { | ||
218 | m_log.Info("===" + m_name + "==="); | ||
219 | foreach (ICommand com in m_commands.Values) | ||
220 | { | ||
221 | m_log.Info("* " + com.Name + " - " + com.Help); | ||
222 | } | ||
223 | } | ||
224 | |||
225 | string EscapeRuntimeAPICommand(string command) | ||
226 | { | ||
227 | command = command.Replace('-', '_'); | ||
228 | StringBuilder tmp = new StringBuilder(command); | ||
229 | tmp[0] = tmp[0].ToString().ToUpper().ToCharArray()[0]; | ||
230 | |||
231 | return tmp.ToString(); | ||
232 | } | ||
233 | |||
234 | /// <summary> | 222 | /// <summary> |
235 | /// Generates a runtime C# class which can be compiled and inserted via reflection to enable modules to register new script commands | 223 | /// Generates a runtime C# class which can be compiled and inserted via reflection to enable modules to register new script commands |
236 | /// </summary> | 224 | /// </summary> |
@@ -253,7 +241,7 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework | |||
253 | { | 241 | { |
254 | classSrc += "\t\targs[" + i.ToString() + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n"; | 242 | classSrc += "\t\targs[" + i.ToString() + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n"; |
255 | i++; | 243 | i++; |
256 | } | 244 | } |
257 | classSrc += "\t\tGetCommander(\"" + m_name + "\").Run(\"" + com.Name + "\", args);\n"; | 245 | classSrc += "\t\tGetCommander(\"" + m_name + "\").Run(\"" + com.Name + "\", args);\n"; |
258 | classSrc += "\t}\n"; | 246 | classSrc += "\t}\n"; |
259 | } | 247 | } |
@@ -296,5 +284,25 @@ namespace OpenSim.Region.Environment.Modules.ModuleFramework | |||
296 | ShowConsoleHelp(); | 284 | ShowConsoleHelp(); |
297 | } | 285 | } |
298 | } | 286 | } |
287 | |||
288 | #endregion | ||
289 | |||
290 | private void ShowConsoleHelp() | ||
291 | { | ||
292 | m_log.Info("===" + m_name + "==="); | ||
293 | foreach (ICommand com in m_commands.Values) | ||
294 | { | ||
295 | m_log.Info("* " + com.Name + " - " + com.Help); | ||
296 | } | ||
297 | } | ||
298 | |||
299 | private string EscapeRuntimeAPICommand(string command) | ||
300 | { | ||
301 | command = command.Replace('-', '_'); | ||
302 | StringBuilder tmp = new StringBuilder(command); | ||
303 | tmp[0] = tmp[0].ToString().ToUpper().ToCharArray()[0]; | ||
304 | |||
305 | return tmp.ToString(); | ||
306 | } | ||
299 | } | 307 | } |
300 | } | 308 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs b/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs index 4046a7c..d932c55 100644 --- a/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs +++ b/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs | |||
@@ -18,22 +18,21 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
18 | public class SvnBackupModule : IRegionModule | 18 | public class SvnBackupModule : IRegionModule |
19 | { | 19 | { |
20 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 20 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
21 | 21 | ||
22 | private SvnClient m_svnClient; | ||
23 | private bool m_enabled = false; | 22 | private bool m_enabled = false; |
24 | private bool m_installBackupOnLoad = false; | 23 | private bool m_installBackupOnLoad = false; |
25 | private string m_svnurl = "svn://insert.your.svn/here/"; | 24 | private List<Scene> m_scenes = new List<Scene>(); |
26 | private string m_svnuser = "username"; | 25 | private IRegionSerialiser m_serialiser; |
27 | private string m_svnpass = "password"; | 26 | private bool m_svnAutoSave = false; |
27 | private SvnClient m_svnClient; | ||
28 | private string m_svndir = "SVNmodule\\repo"; | 28 | private string m_svndir = "SVNmodule\\repo"; |
29 | private string m_svnpass = "password"; | ||
29 | 30 | ||
30 | private TimeSpan m_svnperiod = new TimeSpan(0, 0, 15, 0, 0); | 31 | private TimeSpan m_svnperiod = new TimeSpan(0, 0, 15, 0, 0); |
31 | private bool m_svnAutoSave = false; | 32 | private string m_svnurl = "svn://insert.your.svn/here/"; |
33 | private string m_svnuser = "username"; | ||
32 | private Timer m_timer = new Timer(); | 34 | private Timer m_timer = new Timer(); |
33 | 35 | ||
34 | private IRegionSerialiser m_serialiser; | ||
35 | private List<Scene> m_scenes = new List<Scene>(); | ||
36 | |||
37 | #region SvnModule Core | 36 | #region SvnModule Core |
38 | 37 | ||
39 | /// <summary> | 38 | /// <summary> |
@@ -76,7 +75,9 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
76 | { | 75 | { |
77 | m_svnClient.Add3(m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID.ToString(), true, false, false); | 76 | m_svnClient.Add3(m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID.ToString(), true, false, false); |
78 | } | 77 | } |
79 | catch (SvnException) { } | 78 | catch (SvnException) |
79 | { | ||
80 | } | ||
80 | 81 | ||
81 | List<string> svnfilenames = new List<string>(); | 82 | List<string> svnfilenames = new List<string>(); |
82 | foreach (string filename in filenames) | 83 | foreach (string filename in filenames) |
@@ -88,10 +89,10 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
88 | 89 | ||
89 | public void LoadRegion(Scene scene) | 90 | public void LoadRegion(Scene scene) |
90 | { | 91 | { |
91 | scene.LoadPrimsFromXml2(m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID.ToString() + | 92 | scene.LoadPrimsFromXml2(m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID.ToString() + |
92 | Slash.DirectorySeparatorChar + "objects.xml"); | 93 | Slash.DirectorySeparatorChar + "objects.xml"); |
93 | scene.RequestModuleInterface<ITerrainModule>().LoadFromFile(m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID.ToString() + | 94 | scene.RequestModuleInterface<ITerrainModule>().LoadFromFile(m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID.ToString() + |
94 | Slash.DirectorySeparatorChar + "heightmap.r32"); | 95 | Slash.DirectorySeparatorChar + "heightmap.r32"); |
95 | m_log.Info("[SVNBACKUP]: Region load successful (" + scene.RegionInfo.RegionName + ")."); | 96 | m_log.Info("[SVNBACKUP]: Region load successful (" + scene.RegionInfo.RegionName + ")."); |
96 | } | 97 | } |
97 | 98 | ||
@@ -126,7 +127,7 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
126 | #region SvnDotNet Callbacks | 127 | #region SvnDotNet Callbacks |
127 | 128 | ||
128 | private SvnError SimpleAuth(out SvnAuthCredSimple svnCredentials, IntPtr baton, | 129 | private SvnError SimpleAuth(out SvnAuthCredSimple svnCredentials, IntPtr baton, |
129 | AprString realm, AprString username, bool maySave, AprPool pool) | 130 | AprString realm, AprString username, bool maySave, AprPool pool) |
130 | { | 131 | { |
131 | svnCredentials = SvnAuthCredSimple.Alloc(pool); | 132 | svnCredentials = SvnAuthCredSimple.Alloc(pool); |
132 | svnCredentials.Username = new AprString(m_svnuser, pool); | 133 | svnCredentials.Username = new AprString(m_svnuser, pool); |
@@ -140,7 +141,7 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
140 | if (!commitItems.IsNull) | 141 | if (!commitItems.IsNull) |
141 | { | 142 | { |
142 | foreach (SvnClientCommitItem2 item in commitItems) | 143 | foreach (SvnClientCommitItem2 item in commitItems) |
143 | { | 144 | { |
144 | m_log.Debug("[SVNBACKUP]: ... " + Path.GetFileName(item.Path.ToString()) + " (" + item.Kind.ToString() + ") r" + item.Revision.ToString()); | 145 | m_log.Debug("[SVNBACKUP]: ... " + Path.GetFileName(item.Path.ToString()) + " (" + item.Kind.ToString() + ") r" + item.Revision.ToString()); |
145 | } | 146 | } |
146 | } | 147 | } |
@@ -174,8 +175,11 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
174 | m_svnpass = source.Configs["SVN"].GetString("Password", m_svnpass); | 175 | m_svnpass = source.Configs["SVN"].GetString("Password", m_svnpass); |
175 | m_installBackupOnLoad = source.Configs["SVN"].GetBoolean("ImportOnStartup", m_installBackupOnLoad); | 176 | m_installBackupOnLoad = source.Configs["SVN"].GetBoolean("ImportOnStartup", m_installBackupOnLoad); |
176 | m_svnAutoSave = source.Configs["SVN"].GetBoolean("Autosave", m_svnAutoSave); | 177 | m_svnAutoSave = source.Configs["SVN"].GetBoolean("Autosave", m_svnAutoSave); |
177 | m_svnperiod = new TimeSpan(0, source.Configs["SVN"].GetInt("AutosavePeriod", (int)m_svnperiod.TotalMinutes), 0); | 178 | m_svnperiod = new TimeSpan(0, source.Configs["SVN"].GetInt("AutosavePeriod", (int) m_svnperiod.TotalMinutes), 0); |
178 | } catch(Exception) { } | 179 | } |
180 | catch (Exception) | ||
181 | { | ||
182 | } | ||
179 | 183 | ||
180 | lock (m_scenes) | 184 | lock (m_scenes) |
181 | { | 185 | { |
@@ -185,7 +189,54 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
185 | scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; | 189 | scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; |
186 | } | 190 | } |
187 | 191 | ||
188 | void EventManager_OnPluginConsole(string[] args) | 192 | public void PostInitialise() |
193 | { | ||
194 | if (m_enabled == false) | ||
195 | return; | ||
196 | |||
197 | if (m_svnAutoSave == true) | ||
198 | { | ||
199 | m_timer.Interval = m_svnperiod.TotalMilliseconds; | ||
200 | m_timer.Elapsed += new ElapsedEventHandler(m_timer_Elapsed); | ||
201 | m_timer.AutoReset = true; | ||
202 | m_timer.Start(); | ||
203 | } | ||
204 | |||
205 | m_log.Info("[SVNBACKUP]: Connecting to SVN server " + m_svnurl + " ..."); | ||
206 | SetupSvnProvider(); | ||
207 | |||
208 | m_log.Info("[SVNBACKUP]: Creating repository in " + m_svndir + "."); | ||
209 | CreateSvnDirectory(); | ||
210 | CheckoutSvn(); | ||
211 | SetupSerialiser(); | ||
212 | |||
213 | if (m_installBackupOnLoad) | ||
214 | { | ||
215 | m_log.Info("[SVNBACKUP]: Importing latest SVN revision to scenes..."); | ||
216 | foreach (Scene scene in m_scenes) | ||
217 | { | ||
218 | LoadRegion(scene); | ||
219 | } | ||
220 | } | ||
221 | } | ||
222 | |||
223 | public void Close() | ||
224 | { | ||
225 | } | ||
226 | |||
227 | public string Name | ||
228 | { | ||
229 | get { return "SvnBackupModule"; } | ||
230 | } | ||
231 | |||
232 | public bool IsSharedModule | ||
233 | { | ||
234 | get { return true; } | ||
235 | } | ||
236 | |||
237 | #endregion | ||
238 | |||
239 | private void EventManager_OnPluginConsole(string[] args) | ||
189 | { | 240 | { |
190 | if (args[0] == "svn" && args[1] == "save") | 241 | if (args[0] == "svn" && args[1] == "save") |
191 | { | 242 | { |
@@ -272,38 +323,7 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
272 | } | 323 | } |
273 | } | 324 | } |
274 | 325 | ||
275 | public void PostInitialise() | 326 | private void m_timer_Elapsed(object sender, ElapsedEventArgs e) |
276 | { | ||
277 | if (m_enabled == false) | ||
278 | return; | ||
279 | |||
280 | if (m_svnAutoSave == true) | ||
281 | { | ||
282 | m_timer.Interval = m_svnperiod.TotalMilliseconds; | ||
283 | m_timer.Elapsed += new ElapsedEventHandler(m_timer_Elapsed); | ||
284 | m_timer.AutoReset = true; | ||
285 | m_timer.Start(); | ||
286 | } | ||
287 | |||
288 | m_log.Info("[SVNBACKUP]: Connecting to SVN server " + m_svnurl + " ..."); | ||
289 | SetupSvnProvider(); | ||
290 | |||
291 | m_log.Info("[SVNBACKUP]: Creating repository in " + m_svndir + "."); | ||
292 | CreateSvnDirectory(); | ||
293 | CheckoutSvn(); | ||
294 | SetupSerialiser(); | ||
295 | |||
296 | if (m_installBackupOnLoad) | ||
297 | { | ||
298 | m_log.Info("[SVNBACKUP]: Importing latest SVN revision to scenes..."); | ||
299 | foreach (Scene scene in m_scenes) | ||
300 | { | ||
301 | LoadRegion(scene); | ||
302 | } | ||
303 | } | ||
304 | } | ||
305 | |||
306 | void m_timer_Elapsed(object sender, ElapsedEventArgs e) | ||
307 | { | 327 | { |
308 | SaveAllRegions(); | 328 | SaveAllRegions(); |
309 | } | 329 | } |
@@ -320,7 +340,7 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
320 | m_svnClient.AddUsernameProvider(); | 340 | m_svnClient.AddUsernameProvider(); |
321 | m_svnClient.AddPromptProvider(new SvnAuthProviderObject.SimplePrompt(SimpleAuth), IntPtr.Zero, 2); | 341 | m_svnClient.AddPromptProvider(new SvnAuthProviderObject.SimplePrompt(SimpleAuth), IntPtr.Zero, 2); |
322 | m_svnClient.OpenAuth(); | 342 | m_svnClient.OpenAuth(); |
323 | m_svnClient.Context.LogMsgFunc2 = new SvnDelegate(new SvnClient.GetCommitLog2(GetCommitLogCallback)); | 343 | m_svnClient.Context.LogMsgFunc2 = new SvnDelegate(new SvnClient.GetCommitLog2(GetCommitLogCallback)); |
324 | } | 344 | } |
325 | 345 | ||
326 | private void CreateSvnDirectory() | 346 | private void CreateSvnDirectory() |
@@ -328,22 +348,5 @@ namespace OpenSim.Region.Modules.SvnSerialiser | |||
328 | if (!Directory.Exists(m_svndir)) | 348 | if (!Directory.Exists(m_svndir)) |
329 | Directory.CreateDirectory(m_svndir); | 349 | Directory.CreateDirectory(m_svndir); |
330 | } | 350 | } |
331 | |||
332 | public void Close() | ||
333 | { | ||
334 | |||
335 | } | ||
336 | |||
337 | public string Name | ||
338 | { | ||
339 | get { return "SvnBackupModule"; } | ||
340 | } | ||
341 | |||
342 | public bool IsSharedModule | ||
343 | { | ||
344 | get { return true; } | ||
345 | } | ||
346 | |||
347 | #endregion | ||
348 | } | 351 | } |
349 | } | 352 | } \ No newline at end of file |