aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs
diff options
context:
space:
mode:
authorAdam Frisby2008-04-30 21:22:29 +0000
committerAdam Frisby2008-04-30 21:22:29 +0000
commit4a8c1e4393ac64c84b03aeb16bacb9ddd0a2fae6 (patch)
tree49dde0575502e89aeed428b4190c68306e929b69 /OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs
parent* Previous commit managed to miss some files despite me hitting 'Select all'. (diff)
downloadopensim-SC_OLD-4a8c1e4393ac64c84b03aeb16bacb9ddd0a2fae6.zip
opensim-SC_OLD-4a8c1e4393ac64c84b03aeb16bacb9ddd0a2fae6.tar.gz
opensim-SC_OLD-4a8c1e4393ac64c84b03aeb16bacb9ddd0a2fae6.tar.bz2
opensim-SC_OLD-4a8c1e4393ac64c84b03aeb16bacb9ddd0a2fae6.tar.xz
* Commiting a bunch of missed files.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs169
1 files changed, 169 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs
new file mode 100644
index 0000000..b626f16
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs
@@ -0,0 +1,169 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.IO;
31using Nini.Config;
32using OpenSim.Region.Environment.Interfaces;
33using OpenSim.Region.Environment.Modules.ExportSerialiser;
34using OpenSim.Region.Environment.Modules.Framework;
35using OpenSim.Region.Environment.Scenes;
36
37namespace OpenSim.Region.Environment.Modules.World.Serialiser
38{
39 public class SerialiserModule : IRegionModule, IRegionSerialiser
40 {
41 private Commander m_commander = new Commander("Export");
42 private List<Scene> m_regions = new List<Scene>();
43 private string m_savedir = "exports" + "/";
44 private List<IFileSerialiser> m_serialisers = new List<IFileSerialiser>();
45
46 #region IRegionModule Members
47
48 public void Initialise(Scene scene, IConfigSource source)
49 {
50 scene.RegisterModuleCommander("Export", m_commander);
51 scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
52 scene.RegisterModuleInterface<IRegionSerialiser>(this);
53
54 lock (m_regions)
55 {
56 m_regions.Add(scene);
57 }
58 }
59
60 public void PostInitialise()
61 {
62 lock (m_serialisers)
63 {
64 m_serialisers.Add(new SerialiseTerrain());
65 m_serialisers.Add(new SerialiseObjects());
66 }
67
68 LoadCommanderCommands();
69 }
70
71 public void Close()
72 {
73 m_regions.Clear();
74 }
75
76 public string Name
77 {
78 get { return "ExportSerialisationModule"; }
79 }
80
81 public bool IsSharedModule
82 {
83 get { return true; }
84 }
85
86 #endregion
87
88 #region IRegionSerialiser Members
89
90 public List<string> SerialiseRegion(Scene scene, string saveDir)
91 {
92 List<string> results = new List<string>();
93
94 if (!Directory.Exists(saveDir))
95 {
96 Directory.CreateDirectory(saveDir);
97 }
98
99 lock (m_serialisers)
100 {
101 foreach (IFileSerialiser serialiser in m_serialisers)
102 {
103 results.Add(serialiser.WriteToFile(scene, saveDir));
104 }
105 }
106
107 TextWriter regionInfoWriter = new StreamWriter(saveDir + "README.TXT");
108 regionInfoWriter.WriteLine("Region Name: " + scene.RegionInfo.RegionName);
109 regionInfoWriter.WriteLine("Region ID: " + scene.RegionInfo.RegionID.ToString());
110 regionInfoWriter.WriteLine("Backup Time: UTC " + DateTime.UtcNow.ToString());
111 regionInfoWriter.WriteLine("Serialise Version: 0.1");
112 regionInfoWriter.Close();
113
114 TextWriter manifestWriter = new StreamWriter(saveDir + "region.manifest");
115 foreach (string line in results)
116 {
117 manifestWriter.WriteLine(line);
118 }
119 manifestWriter.Close();
120
121 return results;
122 }
123
124 #endregion
125
126 private void EventManager_OnPluginConsole(string[] args)
127 {
128 if (args[0] == "export")
129 {
130 string[] tmpArgs = new string[args.Length - 2];
131 int i = 0;
132 for (i = 2; i < args.Length; i++)
133 tmpArgs[i - 2] = args[i];
134
135 m_commander.ProcessConsoleCommand(args[1], tmpArgs);
136 }
137 }
138
139 private void InterfaceSaveRegion(Object[] args)
140 {
141 foreach (Scene region in m_regions)
142 {
143 if (region.RegionInfo.RegionName == (string) args[0])
144 {
145 List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/");
146 }
147 }
148 }
149
150 private void InterfaceSaveAllRegions(Object[] args)
151 {
152 foreach (Scene region in m_regions)
153 {
154 List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/");
155 }
156 }
157
158 private void LoadCommanderCommands()
159 {
160 Command serialiseSceneCommand = new Command("save", InterfaceSaveRegion, "Saves the named region into the exports directory.");
161 serialiseSceneCommand.AddArgument("region-name", "The name of the region you wish to export", "String");
162
163 Command serialiseAllScenesCommand = new Command("save-all", InterfaceSaveAllRegions, "Saves all regions into the exports directory.");
164
165 m_commander.RegisterCommand("save", serialiseSceneCommand);
166 m_commander.RegisterCommand("save-all", serialiseAllScenesCommand);
167 }
168 }
169} \ No newline at end of file