diff options
Diffstat (limited to 'OpenSim/Region/Environment/Modules/World/Archiver/RegionSettingsSerializer.cs')
-rw-r--r-- | OpenSim/Region/Environment/Modules/World/Archiver/RegionSettingsSerializer.cs | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/RegionSettingsSerializer.cs b/OpenSim/Region/Environment/Modules/World/Archiver/RegionSettingsSerializer.cs new file mode 100644 index 0000000..e12d0ec --- /dev/null +++ b/OpenSim/Region/Environment/Modules/World/Archiver/RegionSettingsSerializer.cs | |||
@@ -0,0 +1,258 @@ | |||
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 | |||
28 | using System; | ||
29 | using System.IO; | ||
30 | using System.Text; | ||
31 | using System.Xml; | ||
32 | using OpenMetaverse; | ||
33 | using OpenSim.Framework; | ||
34 | |||
35 | namespace OpenSim.Region.Environment.Modules.World.Archiver | ||
36 | { | ||
37 | /// <summary> | ||
38 | /// Serialize and deserialize region settings for an archive file format. | ||
39 | /// </summary> | ||
40 | /// We didn't simply use automatic .NET serializagion for OpenSim.Framework.RegionSettings since this is really | ||
41 | /// a file format rather than an object serialization. | ||
42 | /// TODO: However, we could still have used separate non-framework classes here to read and write the xml | ||
43 | /// automatically rather than laboriously doing it by hand using XmlTextReader and Writer. Should switch to this | ||
44 | /// in the future. | ||
45 | public class RegionSettingsSerializer | ||
46 | { | ||
47 | protected static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding(); | ||
48 | |||
49 | /// <summary> | ||
50 | /// Deserialize region settings | ||
51 | /// </summary> | ||
52 | /// <param name="serializedSettings"></param> | ||
53 | /// <returns></returns> | ||
54 | /// <exception cref="System.Xml.XmlException"></exception> | ||
55 | public static RegionSettings Deserialize(byte[] serializedSettings) | ||
56 | { | ||
57 | return Deserialize(m_asciiEncoding.GetString(serializedSettings, 0, serializedSettings.Length)); | ||
58 | } | ||
59 | |||
60 | /// <summary> | ||
61 | /// Deserialize region settings | ||
62 | /// </summary> | ||
63 | /// <param name="serializedSettings"></param> | ||
64 | /// <returns></returns> | ||
65 | /// <exception cref="System.Xml.XmlException"></exception> | ||
66 | public static RegionSettings Deserialize(string serializedSettings) | ||
67 | { | ||
68 | RegionSettings settings = new RegionSettings(); | ||
69 | |||
70 | StringReader sr = new StringReader(serializedSettings); | ||
71 | XmlTextReader xtr = new XmlTextReader(sr); | ||
72 | |||
73 | xtr.ReadStartElement("RegionSettings"); | ||
74 | |||
75 | xtr.ReadStartElement("General"); | ||
76 | |||
77 | while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) | ||
78 | { | ||
79 | switch (xtr.Name) | ||
80 | { | ||
81 | case "AllowDamage": | ||
82 | settings.AllowDamage = bool.Parse(xtr.ReadElementContentAsString()); | ||
83 | break; | ||
84 | case "AllowLandResell": | ||
85 | settings.AllowLandResell = bool.Parse(xtr.ReadElementContentAsString()); | ||
86 | break; | ||
87 | case "AllowLandJoinDivide": | ||
88 | settings.AllowLandJoinDivide = bool.Parse(xtr.ReadElementContentAsString()); | ||
89 | break; | ||
90 | case "BlockFly": | ||
91 | settings.BlockFly = bool.Parse(xtr.ReadElementContentAsString()); | ||
92 | break; | ||
93 | case "BlockLandShowInSearch": | ||
94 | settings.BlockShowInSearch = bool.Parse(xtr.ReadElementContentAsString()); | ||
95 | break; | ||
96 | case "BlockTerraform": | ||
97 | settings.BlockTerraform = bool.Parse(xtr.ReadElementContentAsString()); | ||
98 | break; | ||
99 | case "DisableCollisions": | ||
100 | settings.DisableCollisions = bool.Parse(xtr.ReadElementContentAsString()); | ||
101 | break; | ||
102 | case "DisablePhysics": | ||
103 | settings.DisablePhysics = bool.Parse(xtr.ReadElementContentAsString()); | ||
104 | break; | ||
105 | case "DisableScripts": | ||
106 | settings.DisableScripts = bool.Parse(xtr.ReadElementContentAsString()); | ||
107 | break; | ||
108 | case "MaturityRating": | ||
109 | settings.Maturity = int.Parse(xtr.ReadElementContentAsString()); | ||
110 | break; | ||
111 | case "RestrictPushing": | ||
112 | settings.RestrictPushing = bool.Parse(xtr.ReadElementContentAsString()); | ||
113 | break; | ||
114 | case "AgentLimit": | ||
115 | settings.AgentLimit = int.Parse(xtr.ReadElementContentAsString()); | ||
116 | break; | ||
117 | case "ObjectBonus": | ||
118 | settings.ObjectBonus = double.Parse(xtr.ReadElementContentAsString()); | ||
119 | break; | ||
120 | } | ||
121 | } | ||
122 | |||
123 | xtr.ReadEndElement(); | ||
124 | xtr.ReadStartElement("GroundTextures"); | ||
125 | |||
126 | while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) | ||
127 | { | ||
128 | switch (xtr.Name) | ||
129 | { | ||
130 | case "Texture1": | ||
131 | settings.TerrainTexture1 = UUID.Parse(xtr.ReadElementContentAsString()); | ||
132 | break; | ||
133 | case "Texture2": | ||
134 | settings.TerrainTexture2 = UUID.Parse(xtr.ReadElementContentAsString()); | ||
135 | break; | ||
136 | case "Texture3": | ||
137 | settings.TerrainTexture3 = UUID.Parse(xtr.ReadElementContentAsString()); | ||
138 | break; | ||
139 | case "Texture4": | ||
140 | settings.TerrainTexture4 = UUID.Parse(xtr.ReadElementContentAsString()); | ||
141 | break; | ||
142 | case "ElevationLowSW": | ||
143 | settings.Elevation1SW = double.Parse(xtr.ReadElementContentAsString()); | ||
144 | break; | ||
145 | case "ElevationLowNW": | ||
146 | settings.Elevation1NW = double.Parse(xtr.ReadElementContentAsString()); | ||
147 | break; | ||
148 | case "ElevationLowSE": | ||
149 | settings.Elevation1SE = double.Parse(xtr.ReadElementContentAsString()); | ||
150 | break; | ||
151 | case "ElevationLowNE": | ||
152 | settings.Elevation1NE = double.Parse(xtr.ReadElementContentAsString()); | ||
153 | break; | ||
154 | case "ElevationHighSW": | ||
155 | settings.Elevation1SW = double.Parse(xtr.ReadElementContentAsString()); | ||
156 | break; | ||
157 | case "ElevationHighNW": | ||
158 | settings.Elevation2NW = double.Parse(xtr.ReadElementContentAsString()); | ||
159 | break; | ||
160 | case "ElevationHighSE": | ||
161 | settings.Elevation2SE = double.Parse(xtr.ReadElementContentAsString()); | ||
162 | break; | ||
163 | case "ElevationHighNE": | ||
164 | settings.Elevation2NE = double.Parse(xtr.ReadElementContentAsString()); | ||
165 | break; | ||
166 | } | ||
167 | } | ||
168 | |||
169 | xtr.ReadEndElement(); | ||
170 | xtr.ReadStartElement("Terrain"); | ||
171 | |||
172 | while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) | ||
173 | { | ||
174 | switch (xtr.Name) | ||
175 | { | ||
176 | case "WaterHeight": | ||
177 | settings.WaterHeight = double.Parse(xtr.ReadElementContentAsString()); | ||
178 | break; | ||
179 | case "TerrainRaiseLimit": | ||
180 | settings.TerrainRaiseLimit = double.Parse(xtr.ReadElementContentAsString()); | ||
181 | break; | ||
182 | case "TerrainLowerLimit": | ||
183 | settings.TerrainLowerLimit = double.Parse(xtr.ReadElementContentAsString()); | ||
184 | break; | ||
185 | case "UseEstateSun": | ||
186 | settings.UseEstateSun = bool.Parse(xtr.ReadElementContentAsString()); | ||
187 | break; | ||
188 | case "FixedSun": | ||
189 | settings.FixedSun = bool.Parse(xtr.ReadElementContentAsString()); | ||
190 | break; | ||
191 | } | ||
192 | } | ||
193 | |||
194 | xtr.Close(); | ||
195 | sr.Close(); | ||
196 | |||
197 | return settings; | ||
198 | } | ||
199 | |||
200 | public static string Serialize(RegionSettings settings) | ||
201 | { | ||
202 | StringWriter sw = new StringWriter(); | ||
203 | XmlTextWriter xtw = new XmlTextWriter(sw); | ||
204 | xtw.Formatting = Formatting.Indented; | ||
205 | xtw.WriteStartDocument(); | ||
206 | |||
207 | xtw.WriteStartElement("RegionSettings"); | ||
208 | |||
209 | xtw.WriteStartElement("General"); | ||
210 | xtw.WriteElementString("AllowDamage", settings.AllowDamage.ToString()); | ||
211 | xtw.WriteElementString("AllowLandResell", settings.AllowLandResell.ToString()); | ||
212 | xtw.WriteElementString("AllowLandJoinDivide", settings.AllowLandJoinDivide.ToString()); | ||
213 | xtw.WriteElementString("BlockFly", settings.BlockFly.ToString()); | ||
214 | xtw.WriteElementString("BlockLandShowInSearch", settings.BlockShowInSearch.ToString()); | ||
215 | xtw.WriteElementString("BlockTerraform", settings.BlockTerraform.ToString()); | ||
216 | xtw.WriteElementString("DisableCollisions", settings.DisableCollisions.ToString()); | ||
217 | xtw.WriteElementString("DisablePhysics", settings.DisablePhysics.ToString()); | ||
218 | xtw.WriteElementString("DisableScripts", settings.DisableScripts.ToString()); | ||
219 | xtw.WriteElementString("MaturityRating", settings.Maturity.ToString()); | ||
220 | xtw.WriteElementString("RestrictPushing", settings.RestrictPushing.ToString()); | ||
221 | xtw.WriteElementString("AgentLimit", settings.AgentLimit.ToString()); | ||
222 | xtw.WriteElementString("ObjectBonus", settings.ObjectBonus.ToString()); | ||
223 | xtw.WriteEndElement(); | ||
224 | |||
225 | xtw.WriteStartElement("GroundTextures"); | ||
226 | xtw.WriteElementString("Texture1", settings.TerrainTexture1.ToString()); | ||
227 | xtw.WriteElementString("Texture2", settings.TerrainTexture2.ToString()); | ||
228 | xtw.WriteElementString("Texture3", settings.TerrainTexture3.ToString()); | ||
229 | xtw.WriteElementString("Texture4", settings.TerrainTexture4.ToString()); | ||
230 | xtw.WriteElementString("ElevationLowSW", settings.Elevation1SW.ToString()); | ||
231 | xtw.WriteElementString("ElevationLowNW", settings.Elevation1NW.ToString()); | ||
232 | xtw.WriteElementString("ElevationLowSE", settings.Elevation1SE.ToString()); | ||
233 | xtw.WriteElementString("ElevationLowNE", settings.Elevation1NE.ToString()); | ||
234 | xtw.WriteElementString("ElevationHighSW", settings.Elevation2SW.ToString()); | ||
235 | xtw.WriteElementString("ElevationHighNW", settings.Elevation2NW.ToString()); | ||
236 | xtw.WriteElementString("ElevationHighSE", settings.Elevation2SE.ToString()); | ||
237 | xtw.WriteElementString("ElevationHighNE", settings.Elevation2NE.ToString()); | ||
238 | xtw.WriteEndElement(); | ||
239 | |||
240 | xtw.WriteStartElement("Terrain"); | ||
241 | xtw.WriteElementString("WaterHeight", settings.WaterHeight.ToString()); | ||
242 | xtw.WriteElementString("TerrainRaiseLimit", settings.TerrainRaiseLimit.ToString()); | ||
243 | xtw.WriteElementString("TerrainLowerLimit", settings.TerrainLowerLimit.ToString()); | ||
244 | xtw.WriteElementString("UseEstateSun", settings.UseEstateSun.ToString()); | ||
245 | xtw.WriteElementString("FixedSun", settings.FixedSun.ToString()); | ||
246 | // XXX: Need to expose interface to get sun phase information from sun module | ||
247 | // xtw.WriteStartElement("SunPhase", | ||
248 | xtw.WriteEndElement(); | ||
249 | |||
250 | xtw.WriteEndElement(); | ||
251 | |||
252 | xtw.Close(); | ||
253 | sw.Close(); | ||
254 | |||
255 | return sw.ToString(); | ||
256 | } | ||
257 | } | ||
258 | } | ||