clockwerk-opensim – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | vero | 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 OpenSimulator 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.IO; |
||
29 | using System.Text; |
||
30 | using System.Xml; |
||
31 | using OpenMetaverse; |
||
32 | using OpenSim.Framework; |
||
33 | using log4net; |
||
34 | using System.Reflection; |
||
35 | |||
36 | namespace OpenSim.Framework.Serialization.External |
||
37 | { |
||
38 | /// <summary> |
||
39 | /// Serialize and deserialize region settings as an external format. |
||
40 | /// </summary> |
||
41 | public class RegionSettingsSerializer |
||
42 | { |
||
43 | /// <summary> |
||
44 | /// Deserialize settings |
||
45 | /// </summary> |
||
46 | /// <param name="serializedSettings"></param> |
||
47 | /// <returns></returns> |
||
48 | /// <exception cref="System.Xml.XmlException"></exception> |
||
49 | public static RegionSettings Deserialize(byte[] serializedSettings) |
||
50 | { |
||
51 | return Deserialize(Encoding.ASCII.GetString(serializedSettings, 0, serializedSettings.Length)); |
||
52 | } |
||
53 | |||
54 | /// <summary> |
||
55 | /// Deserialize settings |
||
56 | /// </summary> |
||
57 | /// <param name="serializedSettings"></param> |
||
58 | /// <returns></returns> |
||
59 | /// <exception cref="System.Xml.XmlException"></exception> |
||
60 | public static RegionSettings Deserialize(string serializedSettings) |
||
61 | { |
||
62 | RegionSettings settings = new RegionSettings(); |
||
63 | |||
64 | StringReader sr = new StringReader(serializedSettings); |
||
65 | XmlTextReader xtr = new XmlTextReader(sr); |
||
66 | |||
67 | xtr.ReadStartElement("RegionSettings"); |
||
68 | |||
69 | xtr.ReadStartElement("General"); |
||
70 | |||
71 | while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) |
||
72 | { |
||
73 | switch (xtr.Name) |
||
74 | { |
||
75 | case "AllowDamage": |
||
76 | settings.AllowDamage = bool.Parse(xtr.ReadElementContentAsString()); |
||
77 | break; |
||
78 | case "AllowLandResell": |
||
79 | settings.AllowLandResell = bool.Parse(xtr.ReadElementContentAsString()); |
||
80 | break; |
||
81 | case "AllowLandJoinDivide": |
||
82 | settings.AllowLandJoinDivide = bool.Parse(xtr.ReadElementContentAsString()); |
||
83 | break; |
||
84 | case "BlockFly": |
||
85 | settings.BlockFly = bool.Parse(xtr.ReadElementContentAsString()); |
||
86 | break; |
||
87 | case "BlockLandShowInSearch": |
||
88 | settings.BlockShowInSearch = bool.Parse(xtr.ReadElementContentAsString()); |
||
89 | break; |
||
90 | case "BlockTerraform": |
||
91 | settings.BlockTerraform = bool.Parse(xtr.ReadElementContentAsString()); |
||
92 | break; |
||
93 | case "DisableCollisions": |
||
94 | settings.DisableCollisions = bool.Parse(xtr.ReadElementContentAsString()); |
||
95 | break; |
||
96 | case "DisablePhysics": |
||
97 | settings.DisablePhysics = bool.Parse(xtr.ReadElementContentAsString()); |
||
98 | break; |
||
99 | case "DisableScripts": |
||
100 | settings.DisableScripts = bool.Parse(xtr.ReadElementContentAsString()); |
||
101 | break; |
||
102 | case "MaturityRating": |
||
103 | settings.Maturity = int.Parse(xtr.ReadElementContentAsString()); |
||
104 | break; |
||
105 | case "RestrictPushing": |
||
106 | settings.RestrictPushing = bool.Parse(xtr.ReadElementContentAsString()); |
||
107 | break; |
||
108 | case "AgentLimit": |
||
109 | settings.AgentLimit = int.Parse(xtr.ReadElementContentAsString()); |
||
110 | break; |
||
111 | case "ObjectBonus": |
||
112 | settings.ObjectBonus = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
113 | break; |
||
114 | } |
||
115 | } |
||
116 | |||
117 | xtr.ReadEndElement(); |
||
118 | xtr.ReadStartElement("GroundTextures"); |
||
119 | |||
120 | while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) |
||
121 | { |
||
122 | switch (xtr.Name) |
||
123 | { |
||
124 | case "Texture1": |
||
125 | settings.TerrainTexture1 = UUID.Parse(xtr.ReadElementContentAsString()); |
||
126 | break; |
||
127 | case "Texture2": |
||
128 | settings.TerrainTexture2 = UUID.Parse(xtr.ReadElementContentAsString()); |
||
129 | break; |
||
130 | case "Texture3": |
||
131 | settings.TerrainTexture3 = UUID.Parse(xtr.ReadElementContentAsString()); |
||
132 | break; |
||
133 | case "Texture4": |
||
134 | settings.TerrainTexture4 = UUID.Parse(xtr.ReadElementContentAsString()); |
||
135 | break; |
||
136 | case "ElevationLowSW": |
||
137 | settings.Elevation1SW = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
138 | break; |
||
139 | case "ElevationLowNW": |
||
140 | settings.Elevation1NW = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
141 | break; |
||
142 | case "ElevationLowSE": |
||
143 | settings.Elevation1SE = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
144 | break; |
||
145 | case "ElevationLowNE": |
||
146 | settings.Elevation1NE = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
147 | break; |
||
148 | case "ElevationHighSW": |
||
149 | settings.Elevation2SW = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
150 | break; |
||
151 | case "ElevationHighNW": |
||
152 | settings.Elevation2NW = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
153 | break; |
||
154 | case "ElevationHighSE": |
||
155 | settings.Elevation2SE = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
156 | break; |
||
157 | case "ElevationHighNE": |
||
158 | settings.Elevation2NE = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
159 | break; |
||
160 | } |
||
161 | } |
||
162 | |||
163 | xtr.ReadEndElement(); |
||
164 | xtr.ReadStartElement("Terrain"); |
||
165 | |||
166 | while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) |
||
167 | { |
||
168 | switch (xtr.Name) |
||
169 | { |
||
170 | case "WaterHeight": |
||
171 | settings.WaterHeight = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
172 | break; |
||
173 | case "TerrainRaiseLimit": |
||
174 | settings.TerrainRaiseLimit = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
175 | break; |
||
176 | case "TerrainLowerLimit": |
||
177 | settings.TerrainLowerLimit = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); |
||
178 | break; |
||
179 | case "UseEstateSun": |
||
180 | settings.UseEstateSun = bool.Parse(xtr.ReadElementContentAsString()); |
||
181 | break; |
||
182 | case "FixedSun": |
||
183 | settings.FixedSun = bool.Parse(xtr.ReadElementContentAsString()); |
||
184 | break; |
||
185 | case "SunPosition": |
||
186 | settings.SunPosition = double.Parse(xtr.ReadElementContentAsString()); |
||
187 | break; |
||
188 | } |
||
189 | } |
||
190 | |||
191 | xtr.ReadEndElement(); |
||
192 | |||
193 | if (xtr.IsStartElement("Telehub")) |
||
194 | { |
||
195 | xtr.ReadStartElement("Telehub"); |
||
196 | |||
197 | while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) |
||
198 | { |
||
199 | switch (xtr.Name) |
||
200 | { |
||
201 | case "TelehubObject": |
||
202 | settings.TelehubObject = UUID.Parse(xtr.ReadElementContentAsString()); |
||
203 | break; |
||
204 | case "SpawnPoint": |
||
205 | string str = xtr.ReadElementContentAsString(); |
||
206 | SpawnPoint sp = SpawnPoint.Parse(str); |
||
207 | settings.AddSpawnPoint(sp); |
||
208 | break; |
||
209 | } |
||
210 | } |
||
211 | } |
||
212 | |||
213 | xtr.Close(); |
||
214 | sr.Close(); |
||
215 | |||
216 | return settings; |
||
217 | } |
||
218 | |||
219 | public static string Serialize(RegionSettings settings) |
||
220 | { |
||
221 | StringWriter sw = new StringWriter(); |
||
222 | XmlTextWriter xtw = new XmlTextWriter(sw); |
||
223 | xtw.Formatting = Formatting.Indented; |
||
224 | xtw.WriteStartDocument(); |
||
225 | |||
226 | xtw.WriteStartElement("RegionSettings"); |
||
227 | |||
228 | xtw.WriteStartElement("General"); |
||
229 | xtw.WriteElementString("AllowDamage", settings.AllowDamage.ToString()); |
||
230 | xtw.WriteElementString("AllowLandResell", settings.AllowLandResell.ToString()); |
||
231 | xtw.WriteElementString("AllowLandJoinDivide", settings.AllowLandJoinDivide.ToString()); |
||
232 | xtw.WriteElementString("BlockFly", settings.BlockFly.ToString()); |
||
233 | xtw.WriteElementString("BlockLandShowInSearch", settings.BlockShowInSearch.ToString()); |
||
234 | xtw.WriteElementString("BlockTerraform", settings.BlockTerraform.ToString()); |
||
235 | xtw.WriteElementString("DisableCollisions", settings.DisableCollisions.ToString()); |
||
236 | xtw.WriteElementString("DisablePhysics", settings.DisablePhysics.ToString()); |
||
237 | xtw.WriteElementString("DisableScripts", settings.DisableScripts.ToString()); |
||
238 | xtw.WriteElementString("MaturityRating", settings.Maturity.ToString()); |
||
239 | xtw.WriteElementString("RestrictPushing", settings.RestrictPushing.ToString()); |
||
240 | xtw.WriteElementString("AgentLimit", settings.AgentLimit.ToString()); |
||
241 | xtw.WriteElementString("ObjectBonus", settings.ObjectBonus.ToString()); |
||
242 | xtw.WriteEndElement(); |
||
243 | |||
244 | xtw.WriteStartElement("GroundTextures"); |
||
245 | xtw.WriteElementString("Texture1", settings.TerrainTexture1.ToString()); |
||
246 | xtw.WriteElementString("Texture2", settings.TerrainTexture2.ToString()); |
||
247 | xtw.WriteElementString("Texture3", settings.TerrainTexture3.ToString()); |
||
248 | xtw.WriteElementString("Texture4", settings.TerrainTexture4.ToString()); |
||
249 | xtw.WriteElementString("ElevationLowSW", settings.Elevation1SW.ToString()); |
||
250 | xtw.WriteElementString("ElevationLowNW", settings.Elevation1NW.ToString()); |
||
251 | xtw.WriteElementString("ElevationLowSE", settings.Elevation1SE.ToString()); |
||
252 | xtw.WriteElementString("ElevationLowNE", settings.Elevation1NE.ToString()); |
||
253 | xtw.WriteElementString("ElevationHighSW", settings.Elevation2SW.ToString()); |
||
254 | xtw.WriteElementString("ElevationHighNW", settings.Elevation2NW.ToString()); |
||
255 | xtw.WriteElementString("ElevationHighSE", settings.Elevation2SE.ToString()); |
||
256 | xtw.WriteElementString("ElevationHighNE", settings.Elevation2NE.ToString()); |
||
257 | xtw.WriteEndElement(); |
||
258 | |||
259 | xtw.WriteStartElement("Terrain"); |
||
260 | xtw.WriteElementString("WaterHeight", settings.WaterHeight.ToString()); |
||
261 | xtw.WriteElementString("TerrainRaiseLimit", settings.TerrainRaiseLimit.ToString()); |
||
262 | xtw.WriteElementString("TerrainLowerLimit", settings.TerrainLowerLimit.ToString()); |
||
263 | xtw.WriteElementString("UseEstateSun", settings.UseEstateSun.ToString()); |
||
264 | xtw.WriteElementString("FixedSun", settings.FixedSun.ToString()); |
||
265 | xtw.WriteElementString("SunPosition", settings.SunPosition.ToString()); |
||
266 | // Note: 'SunVector' isn't saved because this value is owned by the Sun Module, which |
||
267 | // calculates it automatically according to the date and other factors. |
||
268 | xtw.WriteEndElement(); |
||
269 | |||
270 | xtw.WriteStartElement("Telehub"); |
||
271 | if (settings.TelehubObject != UUID.Zero) |
||
272 | { |
||
273 | xtw.WriteElementString("TelehubObject", settings.TelehubObject.ToString()); |
||
274 | foreach (SpawnPoint sp in settings.SpawnPoints()) |
||
275 | xtw.WriteElementString("SpawnPoint", sp.ToString()); |
||
276 | } |
||
277 | xtw.WriteEndElement(); |
||
278 | |||
279 | xtw.WriteEndElement(); |
||
280 | |||
281 | xtw.Close(); |
||
282 | sw.Close(); |
||
283 | |||
284 | return sw.ToString(); |
||
285 | } |
||
286 | } |
||
287 | } |