OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
RegionSettingsSerializer.cs
Go to the documentation of this file.
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 {
42  {
49  public static RegionSettings Deserialize(byte[] serializedSettings)
50  {
51  return Deserialize(Encoding.ASCII.GetString(serializedSettings, 0, serializedSettings.Length));
52  }
53 
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 }
static NumberFormatInfo NumberFormatInfo
Definition: Culture.cs:39
OpenSim.Framework.RegionSettings RegionSettings
static RegionSettings Deserialize(byte[] serializedSettings)
Deserialize settings
Serialize and deserialize region settings as an external format.
override string ToString()
Returns a string representation of this SpawnPoint.
UUID TelehubObject
Connected Telehub object
List< SpawnPoint > SpawnPoints()
static RegionSettings Deserialize(string serializedSettings)
Deserialize settings