From 52a32878a9573681e3b56d0151c4a0903719eadf Mon Sep 17 00:00:00 2001
From: Oren Hurvitz
Date: Thu, 3 May 2012 19:38:35 +0300
Subject: Save the Telehub and its Spawn Points in the OAR
---
OpenSim/Framework/RegionSettings.cs | 29 ++++++++++++++++-
.../External/RegionSettingsSerializer.cs | 37 ++++++++++++++++++++--
.../Tests/RegionSettingsSerializerTests.cs | 8 +++++
3 files changed, 71 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Framework')
diff --git a/OpenSim/Framework/RegionSettings.cs b/OpenSim/Framework/RegionSettings.cs
index 4ce3392..47dbcec 100644
--- a/OpenSim/Framework/RegionSettings.cs
+++ b/OpenSim/Framework/RegionSettings.cs
@@ -29,6 +29,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using OpenMetaverse;
+using System.Runtime.Serialization;
namespace OpenSim.Framework
{
@@ -71,6 +72,32 @@ namespace OpenSim.Framework
return pos + offset;
}
+
+ ///
+ /// Returns a string representation of this SpawnPoint.
+ ///
+ ///
+ public override string ToString()
+ {
+ return string.Format("{0},{1},{2}", Yaw, Pitch, Distance);
+ }
+
+ ///
+ /// Generate a SpawnPoint from a string
+ ///
+ ///
+ public static SpawnPoint Parse(string str)
+ {
+ string[] parts = str.Split(',');
+ if (parts.Length != 3)
+ throw new ArgumentException("Invalid string: " + str);
+
+ SpawnPoint sp = new SpawnPoint();
+ sp.Yaw = float.Parse(parts[0]);
+ sp.Pitch = float.Parse(parts[1]);
+ sp.Distance = float.Parse(parts[2]);
+ return sp;
+ }
}
public class RegionSettings
@@ -456,7 +483,7 @@ namespace OpenSim.Framework
}
// Connected Telehub object
- private UUID m_TelehubObject;
+ private UUID m_TelehubObject = UUID.Zero;
public UUID TelehubObject
{
get
diff --git a/OpenSim/Framework/Serialization/External/RegionSettingsSerializer.cs b/OpenSim/Framework/Serialization/External/RegionSettingsSerializer.cs
index 931898c..f18435d 100644
--- a/OpenSim/Framework/Serialization/External/RegionSettingsSerializer.cs
+++ b/OpenSim/Framework/Serialization/External/RegionSettingsSerializer.cs
@@ -30,6 +30,8 @@ using System.Text;
using System.Xml;
using OpenMetaverse;
using OpenSim.Framework;
+using log4net;
+using System.Reflection;
namespace OpenSim.Framework.Serialization.External
{
@@ -187,7 +189,29 @@ namespace OpenSim.Framework.Serialization.External
break;
}
}
-
+
+ xtr.ReadEndElement();
+
+ if (xtr.IsStartElement("Telehub"))
+ {
+ xtr.ReadStartElement("Telehub");
+
+ while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
+ {
+ switch (xtr.Name)
+ {
+ case "TelehubObject":
+ settings.TelehubObject = UUID.Parse(xtr.ReadElementContentAsString());
+ break;
+ case "SpawnPoint":
+ string str = xtr.ReadElementContentAsString();
+ SpawnPoint sp = SpawnPoint.Parse(str);
+ settings.AddSpawnPoint(sp);
+ break;
+ }
+ }
+ }
+
xtr.Close();
sr.Close();
@@ -243,7 +267,16 @@ namespace OpenSim.Framework.Serialization.External
xtw.WriteElementString("SunPosition", settings.SunPosition.ToString());
// Note: 'SunVector' isn't saved because this value is owned by the Sun Module, which
// calculates it automatically according to the date and other factors.
- xtw.WriteEndElement();
+ xtw.WriteEndElement();
+
+ xtw.WriteStartElement("Telehub");
+ if (settings.TelehubObject != UUID.Zero)
+ {
+ xtw.WriteElementString("TelehubObject", settings.TelehubObject.ToString());
+ foreach (SpawnPoint sp in settings.SpawnPoints())
+ xtw.WriteElementString("SpawnPoint", sp.ToString());
+ }
+ xtw.WriteEndElement();
xtw.WriteEndElement();
diff --git a/OpenSim/Framework/Serialization/Tests/RegionSettingsSerializerTests.cs b/OpenSim/Framework/Serialization/Tests/RegionSettingsSerializerTests.cs
index a61e4af..09b6f6d 100644
--- a/OpenSim/Framework/Serialization/Tests/RegionSettingsSerializerTests.cs
+++ b/OpenSim/Framework/Serialization/Tests/RegionSettingsSerializerTests.cs
@@ -78,6 +78,10 @@ namespace OpenSim.Framework.Serialization.Tests
true
12
+
+ 00000000-0000-0000-0000-111111111111
+ 1,-2,0.33
+
";
private RegionSettings m_rs;
@@ -116,6 +120,8 @@ namespace OpenSim.Framework.Serialization.Tests
m_rs.TerrainTexture4 = UUID.Parse("00000000-0000-0000-0000-000000000080");
m_rs.UseEstateSun = true;
m_rs.WaterHeight = 23;
+ m_rs.TelehubObject = UUID.Parse("00000000-0000-0000-0000-111111111111");
+ m_rs.AddSpawnPoint(SpawnPoint.Parse("1,-2,0.33"));
}
[Test]
@@ -129,6 +135,8 @@ namespace OpenSim.Framework.Serialization.Tests
Assert.That(deserRs.TerrainTexture2, Is.EqualTo(m_rs.TerrainTexture2));
Assert.That(deserRs.DisablePhysics, Is.EqualTo(m_rs.DisablePhysics));
Assert.That(deserRs.TerrainLowerLimit, Is.EqualTo(m_rs.TerrainLowerLimit));
+ Assert.That(deserRs.TelehubObject, Is.EqualTo(m_rs.TelehubObject));
+ Assert.That(deserRs.SpawnPoints()[0].ToString(), Is.EqualTo(m_rs.SpawnPoints()[0].ToString()));
}
}
}
--
cgit v1.1