Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Conflicts: OpenSim/Region/Framework/Scenes/SceneObjectPart.csiar_mods
commit
ea19e50919
|
@ -34,7 +34,7 @@ using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Framework
|
namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
public struct LandAccessEntry
|
public class LandAccessEntry
|
||||||
{
|
{
|
||||||
public UUID AgentID;
|
public UUID AgentID;
|
||||||
public int Expires;
|
public int Expires;
|
||||||
|
|
|
@ -24,11 +24,13 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
|
|
||||||
|
@ -39,6 +41,55 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ExternalRepresentationUtils
|
public class ExternalRepresentationUtils
|
||||||
{
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Populate a node with data read from xml using a dictinoary of processors
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="nodeToFill"></param>
|
||||||
|
/// <param name="processors">
|
||||||
|
/// A <see cref="Dictionary<System.String, Action<NodeType, XmlTextReader>>"/>
|
||||||
|
/// </param>
|
||||||
|
/// <param name="xtr">
|
||||||
|
/// A <see cref="XmlTextReader"/>
|
||||||
|
/// </param>
|
||||||
|
public static void ExecuteReadProcessors<NodeType>(
|
||||||
|
NodeType nodeToFill, Dictionary<string, Action<NodeType, XmlTextReader>> processors, XmlTextReader xtr)
|
||||||
|
{
|
||||||
|
string nodeName = string.Empty;
|
||||||
|
while (xtr.NodeType != XmlNodeType.EndElement)
|
||||||
|
{
|
||||||
|
nodeName = xtr.Name;
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[ExternalRepresentationUtils]: Processing: {0}", nodeName);
|
||||||
|
|
||||||
|
Action<NodeType, XmlTextReader> p = null;
|
||||||
|
if (processors.TryGetValue(xtr.Name, out p))
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat("[ExternalRepresentationUtils]: Found {0} processor, nodeName);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
p(nodeToFill, xtr);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[ExternalRepresentationUtils]: Exception while parsing element {0}, continuing. Exception {1}{2}",
|
||||||
|
nodeName, e.Message, e.StackTrace);
|
||||||
|
|
||||||
|
if (xtr.NodeType == XmlNodeType.EndElement)
|
||||||
|
xtr.Read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat("[LandDataSerializer]: caught unknown element {0}", nodeName);
|
||||||
|
xtr.ReadOuterXml(); // ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Takes a XML representation of a SceneObjectPart and returns another XML representation
|
/// Takes a XML representation of a SceneObjectPart and returns another XML representation
|
||||||
/// with creator data added to it.
|
/// with creator data added to it.
|
||||||
|
|
|
@ -28,8 +28,10 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
|
||||||
|
@ -40,8 +42,119 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class LandDataSerializer
|
public class LandDataSerializer
|
||||||
{
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
protected static UTF8Encoding m_utf8Encoding = new UTF8Encoding();
|
protected static UTF8Encoding m_utf8Encoding = new UTF8Encoding();
|
||||||
|
|
||||||
|
private static Dictionary<string, Action<LandData, XmlTextReader>> m_ldProcessors
|
||||||
|
= new Dictionary<string, Action<LandData, XmlTextReader>>();
|
||||||
|
|
||||||
|
private static Dictionary<string, Action<LandAccessEntry, XmlTextReader>> m_laeProcessors
|
||||||
|
= new Dictionary<string, Action<LandAccessEntry, XmlTextReader>>();
|
||||||
|
|
||||||
|
static LandDataSerializer()
|
||||||
|
{
|
||||||
|
// LandData processors
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Area", (ld, xtr) => ld.Area = Convert.ToInt32(xtr.ReadElementString("Area")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"AuctionID", (ld, xtr) => ld.AuctionID = Convert.ToUInt32(xtr.ReadElementString("AuctionID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"AuthBuyerID", (ld, xtr) => ld.AuthBuyerID = UUID.Parse(xtr.ReadElementString("AuthBuyerID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Category", (ld, xtr) => ld.Category = (ParcelCategory)Convert.ToSByte(xtr.ReadElementString("Category")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"ClaimDate", (ld, xtr) => ld.ClaimDate = Convert.ToInt32(xtr.ReadElementString("ClaimDate")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"ClaimPrice", (ld, xtr) => ld.ClaimPrice = Convert.ToInt32(xtr.ReadElementString("ClaimPrice")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"GlobalID", (ld, xtr) => ld.GlobalID = UUID.Parse(xtr.ReadElementString("GlobalID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"GroupID", (ld, xtr) => ld.GroupID = UUID.Parse(xtr.ReadElementString("GroupID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"IsGroupOwned", (ld, xtr) => ld.IsGroupOwned = Convert.ToBoolean(xtr.ReadElementString("IsGroupOwned")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Bitmap", (ld, xtr) => ld.Bitmap = Convert.FromBase64String(xtr.ReadElementString("Bitmap")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Description", (ld, xtr) => ld.Description = xtr.ReadElementString("Description"));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Flags", (ld, xtr) => ld.Flags = Convert.ToUInt32(xtr.ReadElementString("Flags")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"LandingType", (ld, xtr) => ld.LandingType = Convert.ToByte(xtr.ReadElementString("LandingType")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Name", (ld, xtr) => ld.Name = xtr.ReadElementString("Name"));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"Status", (ld, xtr) => ld.Status = (ParcelStatus)Convert.ToSByte(xtr.ReadElementString("Status")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"LocalID", (ld, xtr) => ld.LocalID = Convert.ToInt32(xtr.ReadElementString("LocalID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"MediaAutoScale", (ld, xtr) => ld.MediaAutoScale = Convert.ToByte(xtr.ReadElementString("MediaAutoScale")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"MediaID", (ld, xtr) => ld.MediaID = UUID.Parse(xtr.ReadElementString("MediaID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"MediaURL", (ld, xtr) => ld.MediaURL = xtr.ReadElementString("MediaURL"));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"MusicURL", (ld, xtr) => ld.MusicURL = xtr.ReadElementString("MusicURL"));
|
||||||
|
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"ParcelAccessList", ProcessParcelAccessList);
|
||||||
|
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"PassHours", (ld, xtr) => ld.PassHours = Convert.ToSingle(xtr.ReadElementString("PassHours")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"PassPrice", (ld, xtr) => ld.PassPrice = Convert.ToInt32(xtr.ReadElementString("PassPrice")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"SalePrice", (ld, xtr) => ld.SalePrice = Convert.ToInt32(xtr.ReadElementString("SalePrice")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"SnapshotID", (ld, xtr) => ld.SnapshotID = UUID.Parse(xtr.ReadElementString("SnapshotID")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"UserLocation", (ld, xtr) => ld.UserLocation = Vector3.Parse(xtr.ReadElementString("UserLocation")));
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"UserLookAt", (ld, xtr) => ld.UserLookAt = Vector3.Parse(xtr.ReadElementString("UserLookAt")));
|
||||||
|
|
||||||
|
// No longer used here //
|
||||||
|
// m_ldProcessors.Add("Dwell", (landData, xtr) => return);
|
||||||
|
|
||||||
|
m_ldProcessors.Add(
|
||||||
|
"OtherCleanTime", (ld, xtr) => ld.OtherCleanTime = Convert.ToInt32(xtr.ReadElementString("OtherCleanTime")));
|
||||||
|
|
||||||
|
// LandAccessEntryProcessors
|
||||||
|
m_laeProcessors.Add(
|
||||||
|
"AgentID", (lae, xtr) => lae.AgentID = UUID.Parse(xtr.ReadElementString("AgentID")));
|
||||||
|
m_laeProcessors.Add(
|
||||||
|
"Time", (lae, xtr) =>
|
||||||
|
{
|
||||||
|
// We really don't care about temp vs perm here and this
|
||||||
|
// would break on old oars. Assume all bans are perm
|
||||||
|
xtr.ReadElementString("Time");
|
||||||
|
lae.Expires = 0; // Convert.ToUint( xtr.ReadElementString("Time"));
|
||||||
|
}
|
||||||
|
);
|
||||||
|
m_laeProcessors.Add(
|
||||||
|
"AccessList", (lae, xtr) => lae.Flags = (AccessList)Convert.ToUInt32(xtr.ReadElementString("AccessList")));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ProcessParcelAccessList(LandData ld, XmlTextReader xtr)
|
||||||
|
{
|
||||||
|
if (!xtr.IsEmptyElement)
|
||||||
|
{
|
||||||
|
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
|
||||||
|
{
|
||||||
|
LandAccessEntry lae = new LandAccessEntry();
|
||||||
|
|
||||||
|
xtr.ReadStartElement("ParcelAccessEntry");
|
||||||
|
|
||||||
|
ExternalRepresentationUtils.ExecuteReadProcessors<LandAccessEntry>(lae, m_laeProcessors, xtr);
|
||||||
|
|
||||||
|
xtr.ReadEndElement();
|
||||||
|
|
||||||
|
ld.ParcelAccessList.Add(lae);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xtr.Read();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reify/deserialize landData
|
/// Reify/deserialize landData
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -63,72 +176,14 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
LandData landData = new LandData();
|
LandData landData = new LandData();
|
||||||
|
|
||||||
StringReader sr = new StringReader(serializedLandData);
|
using (XmlTextReader reader = new XmlTextReader(new StringReader(serializedLandData)))
|
||||||
XmlTextReader xtr = new XmlTextReader(sr);
|
|
||||||
|
|
||||||
xtr.ReadStartElement("LandData");
|
|
||||||
|
|
||||||
landData.Area = Convert.ToInt32( xtr.ReadElementString("Area"));
|
|
||||||
landData.AuctionID = Convert.ToUInt32( xtr.ReadElementString("AuctionID"));
|
|
||||||
landData.AuthBuyerID = UUID.Parse( xtr.ReadElementString("AuthBuyerID"));
|
|
||||||
landData.Category = (ParcelCategory)Convert.ToSByte( xtr.ReadElementString("Category"));
|
|
||||||
landData.ClaimDate = Convert.ToInt32( xtr.ReadElementString("ClaimDate"));
|
|
||||||
landData.ClaimPrice = Convert.ToInt32( xtr.ReadElementString("ClaimPrice"));
|
|
||||||
landData.GlobalID = UUID.Parse( xtr.ReadElementString("GlobalID"));
|
|
||||||
landData.GroupID = UUID.Parse( xtr.ReadElementString("GroupID"));
|
|
||||||
landData.IsGroupOwned = Convert.ToBoolean( xtr.ReadElementString("IsGroupOwned"));
|
|
||||||
landData.Bitmap = Convert.FromBase64String( xtr.ReadElementString("Bitmap"));
|
|
||||||
landData.Description = xtr.ReadElementString("Description");
|
|
||||||
landData.Flags = Convert.ToUInt32( xtr.ReadElementString("Flags"));
|
|
||||||
landData.LandingType = Convert.ToByte( xtr.ReadElementString("LandingType"));
|
|
||||||
landData.Name = xtr.ReadElementString("Name");
|
|
||||||
landData.Status = (ParcelStatus)Convert.ToSByte( xtr.ReadElementString("Status"));
|
|
||||||
landData.LocalID = Convert.ToInt32( xtr.ReadElementString("LocalID"));
|
|
||||||
landData.MediaAutoScale = Convert.ToByte( xtr.ReadElementString("MediaAutoScale"));
|
|
||||||
landData.MediaID = UUID.Parse( xtr.ReadElementString("MediaID"));
|
|
||||||
landData.MediaURL = xtr.ReadElementString("MediaURL");
|
|
||||||
landData.MusicURL = xtr.ReadElementString("MusicURL");
|
|
||||||
landData.OwnerID = UUID.Parse( xtr.ReadElementString("OwnerID"));
|
|
||||||
|
|
||||||
landData.ParcelAccessList = new List<LandAccessEntry>();
|
|
||||||
xtr.Read();
|
|
||||||
if (xtr.Name != "ParcelAccessList")
|
|
||||||
throw new XmlException(String.Format("Expected \"ParcelAccessList\" element but got \"{0}\"", xtr.Name));
|
|
||||||
|
|
||||||
if (!xtr.IsEmptyElement)
|
|
||||||
{
|
{
|
||||||
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
|
reader.ReadStartElement("LandData");
|
||||||
{
|
|
||||||
LandAccessEntry pae = new LandAccessEntry();
|
|
||||||
|
|
||||||
xtr.ReadStartElement("ParcelAccessEntry");
|
ExternalRepresentationUtils.ExecuteReadProcessors<LandData>(landData, m_ldProcessors, reader);
|
||||||
pae.AgentID = UUID.Parse( xtr.ReadElementString("AgentID"));
|
|
||||||
// We really don't care about temp vs perm here and this
|
|
||||||
// would break on old oars. Assume all bans are perm
|
|
||||||
xtr.ReadElementString("Time");
|
|
||||||
pae.Expires = 0; // Convert.ToUint( xtr.ReadElementString("Time"));
|
|
||||||
pae.Flags = (AccessList)Convert.ToUInt32( xtr.ReadElementString("AccessList"));
|
|
||||||
xtr.ReadEndElement();
|
|
||||||
|
|
||||||
landData.ParcelAccessList.Add(pae);
|
reader.ReadEndElement();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
xtr.Read();
|
|
||||||
|
|
||||||
landData.PassHours = Convert.ToSingle( xtr.ReadElementString("PassHours"));
|
|
||||||
landData.PassPrice = Convert.ToInt32( xtr.ReadElementString("PassPrice"));
|
|
||||||
landData.SalePrice = Convert.ToInt32( xtr.ReadElementString("SalePrice"));
|
|
||||||
landData.SnapshotID = UUID.Parse( xtr.ReadElementString("SnapshotID"));
|
|
||||||
landData.UserLocation = Vector3.Parse( xtr.ReadElementString("UserLocation"));
|
|
||||||
landData.UserLookAt = Vector3.Parse( xtr.ReadElementString("UserLookAt"));
|
|
||||||
// No longer used here
|
|
||||||
xtr.ReadElementString("Dwell");
|
|
||||||
landData.OtherCleanTime = Convert.ToInt32( xtr.ReadElementString("OtherCleanTime"));
|
|
||||||
|
|
||||||
xtr.ReadEndElement();
|
|
||||||
|
|
||||||
xtr.Close();
|
|
||||||
sr.Close();
|
|
||||||
|
|
||||||
return landData;
|
return landData;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,14 +41,13 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Serialize and deserialize user inventory items as an external format.
|
/// Serialize and deserialize user inventory items as an external format.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// XXX: Please do not use yet.
|
|
||||||
public class UserInventoryItemSerializer
|
public class UserInventoryItemSerializer
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private delegate void InventoryItemXmlProcessor(InventoryItemBase item, XmlTextReader reader);
|
private static Dictionary<string, Action<InventoryItemBase, XmlTextReader>> m_InventoryItemXmlProcessors
|
||||||
private static Dictionary<string, InventoryItemXmlProcessor> m_InventoryItemXmlProcessors = new Dictionary<string, InventoryItemXmlProcessor>();
|
= new Dictionary<string, Action<InventoryItemBase, XmlTextReader>>();
|
||||||
|
|
||||||
#region InventoryItemBase Processor initialization
|
#region InventoryItemBase Processor initialization
|
||||||
static UserInventoryItemSerializer()
|
static UserInventoryItemSerializer()
|
||||||
|
@ -205,39 +204,14 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
reader.ReadStartElement("InventoryItem");
|
reader.ReadStartElement("InventoryItem");
|
||||||
|
|
||||||
string nodeName = string.Empty;
|
ExternalRepresentationUtils.ExecuteReadProcessors<InventoryItemBase>(
|
||||||
while (reader.NodeType != XmlNodeType.EndElement)
|
item, m_InventoryItemXmlProcessors, reader);
|
||||||
{
|
|
||||||
nodeName = reader.Name;
|
|
||||||
InventoryItemXmlProcessor p = null;
|
|
||||||
if (m_InventoryItemXmlProcessors.TryGetValue(reader.Name, out p))
|
|
||||||
{
|
|
||||||
//m_log.DebugFormat("[XXX] Processing: {0}", reader.Name);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
p(item, reader);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("[InventoryItemSerializer]: exception while parsing {0}: {1}", nodeName, e);
|
|
||||||
if (reader.NodeType == XmlNodeType.EndElement)
|
|
||||||
reader.Read();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// m_log.DebugFormat("[InventoryItemSerializer]: caught unknown element {0}", nodeName);
|
|
||||||
reader.ReadOuterXml(); // ignore
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
reader.ReadEndElement(); // InventoryItem
|
reader.ReadEndElement(); // InventoryItem
|
||||||
}
|
}
|
||||||
|
|
||||||
//m_log.DebugFormat("[XXX]: parsed InventoryItemBase {0} - {1}", obj.Name, obj.UUID);
|
//m_log.DebugFormat("[XXX]: parsed InventoryItemBase {0} - {1}", obj.Name, obj.UUID);
|
||||||
return item;
|
return item;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string Serialize(InventoryItemBase inventoryItem, Dictionary<string, object> options, IUserAccountService userAccountService)
|
public static string Serialize(InventoryItemBase inventoryItem, Dictionary<string, object> options, IUserAccountService userAccountService)
|
||||||
|
|
|
@ -33,8 +33,11 @@ using OpenSim.Framework;
|
||||||
namespace OpenSim.Framework.Serialization.External
|
namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Serialize and deserialize region settings as an external format.
|
/// Serialize and deserialize user profiles as an external format.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Currently UNUSED.
|
||||||
|
/// </remarks>
|
||||||
public class UserProfileSerializer
|
public class UserProfileSerializer
|
||||||
{
|
{
|
||||||
public const int MAJOR_VERSION = 0;
|
public const int MAJOR_VERSION = 0;
|
||||||
|
|
|
@ -27,11 +27,12 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using OpenSim.Framework;
|
|
||||||
using OpenSim.Framework.Serialization.External;
|
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Serialization.External;
|
||||||
|
using OpenSim.Tests.Common;
|
||||||
|
|
||||||
namespace OpenSim.Framework.Serialization.Tests
|
namespace OpenSim.Framework.Serialization.Tests
|
||||||
{
|
{
|
||||||
|
@ -92,6 +93,8 @@ namespace OpenSim.Framework.Serialization.Tests
|
||||||
[Test]
|
[Test]
|
||||||
public void LandDataSerializerSerializeTest()
|
public void LandDataSerializerSerializeTest()
|
||||||
{
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
string serialized = LandDataSerializer.Serialize(this.land).Replace("\r\n", "\n");
|
string serialized = LandDataSerializer.Serialize(this.land).Replace("\r\n", "\n");
|
||||||
Assert.That(serialized.Length > 0, "Serialize(LandData) returned empty string");
|
Assert.That(serialized.Length > 0, "Serialize(LandData) returned empty string");
|
||||||
|
|
||||||
|
@ -112,20 +115,32 @@ namespace OpenSim.Framework.Serialization.Tests
|
||||||
/// Test the LandDataSerializer.Deserialize() method
|
/// Test the LandDataSerializer.Deserialize() method
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
public void TestLandDataSerializerDeserializeFromStringTest()
|
public void TestLandDataDeserializeNoAccessLists()
|
||||||
{
|
{
|
||||||
LandData reifiedLandData = LandDataSerializer.Deserialize(LandDataSerializerTest.preSerialized);
|
TestHelpers.InMethod();
|
||||||
Assert.That(reifiedLandData != null, "Deserialize(string) returned null");
|
log4net.Config.XmlConfigurator.Configure();
|
||||||
Assert.That(reifiedLandData.GlobalID == this.land.GlobalID, "Reified LandData.GlobalID != original LandData.GlobalID");
|
|
||||||
Assert.That(reifiedLandData.Name == this.land.Name, "Reified LandData.Name != original LandData.Name");
|
|
||||||
|
|
||||||
LandData reifiedLandDataWithParcelAccessList = LandDataSerializer.Deserialize(LandDataSerializerTest.preSerializedWithParcelAccessList);
|
LandData ld = LandDataSerializer.Deserialize(LandDataSerializerTest.preSerialized);
|
||||||
Assert.That(reifiedLandDataWithParcelAccessList != null,
|
Assert.That(ld != null, "Deserialize(string) returned null");
|
||||||
|
Assert.That(ld.GlobalID == this.land.GlobalID, "Reified LandData.GlobalID != original LandData.GlobalID");
|
||||||
|
Assert.That(ld.Name == this.land.Name, "Reified LandData.Name != original LandData.Name");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestLandDataDeserializeWithAccessLists()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
LandData ld = LandDataSerializer.Deserialize(LandDataSerializerTest.preSerializedWithParcelAccessList);
|
||||||
|
Assert.That(ld != null,
|
||||||
"Deserialize(string) returned null (pre-serialized with parcel access list)");
|
"Deserialize(string) returned null (pre-serialized with parcel access list)");
|
||||||
Assert.That(reifiedLandDataWithParcelAccessList.GlobalID == this.landWithParcelAccessList.GlobalID,
|
Assert.That(ld.GlobalID == this.landWithParcelAccessList.GlobalID,
|
||||||
"Reified LandData.GlobalID != original LandData.GlobalID (pre-serialized with parcel access list)");
|
"Reified LandData.GlobalID != original LandData.GlobalID (pre-serialized with parcel access list)");
|
||||||
Assert.That(reifiedLandDataWithParcelAccessList.Name == this.landWithParcelAccessList.Name,
|
Assert.That(ld.Name == this.landWithParcelAccessList.Name,
|
||||||
"Reified LandData.Name != original LandData.Name (pre-serialized with parcel access list)");
|
"Reified LandData.Name != original LandData.Name (pre-serialized with parcel access list)");
|
||||||
|
Assert.That(ld.ParcelAccessList.Count, Is.EqualTo(2));
|
||||||
|
Assert.That(ld.ParcelAccessList[0].AgentID, Is.EqualTo(UUID.Parse("62d65d45-c91a-4f77-862c-46557d978b6c")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,7 +122,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
|
|
||||||
scene.AddCommand(
|
scene.AddCommand(
|
||||||
this, "save iar",
|
this, "save iar",
|
||||||
"save iar [-h|--home=<url>] [--noassets] <first> <last> <inventory path> <password> [<IAR path>] [--v|-verbose]",
|
"save iar [-p|--profile=<url>] [--noassets] <first> <last> <inventory path> <password> [<IAR path>] [-c|--creators] [-v|--verbose]",
|
||||||
"Save user inventory archive (IAR).",
|
"Save user inventory archive (IAR).",
|
||||||
"<first> is the user's first name." + Environment.NewLine
|
"<first> is the user's first name." + Environment.NewLine
|
||||||
+ "<last> is the user's last name." + Environment.NewLine
|
+ "<last> is the user's last name." + Environment.NewLine
|
||||||
|
@ -408,7 +408,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
if (mainParams.Count < 6)
|
if (mainParams.Count < 6)
|
||||||
{
|
{
|
||||||
m_log.Error(
|
m_log.Error(
|
||||||
"[INVENTORY ARCHIVER]: usage is save iar [--p|-profile=<url>] [--noassets] <first name> <last name> <inventory path> <user password> [<save file path>]");
|
"[INVENTORY ARCHIVER]: usage is save iar [-p|--profile=<url>] [--noassets] <first name> <last name> <inventory path> <user password> [<save file path>] [-c|--creators] [-v|--verbose]");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -140,24 +140,26 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
// acd.AgentID, i, acd.Appearance.Texture.FaceTextures[i]);
|
// acd.AgentID, i, acd.Appearance.Texture.FaceTextures[i]);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
|
|
||||||
scene.AddNewClient(npcAvatar, PresenceType.Npc);
|
|
||||||
|
|
||||||
ScenePresence sp;
|
|
||||||
if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
|
|
||||||
{
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);
|
|
||||||
|
|
||||||
sp.CompleteMovement(npcAvatar, false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
|
|
||||||
}
|
|
||||||
|
|
||||||
lock (m_avatars)
|
lock (m_avatars)
|
||||||
|
{
|
||||||
|
scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
|
||||||
|
scene.AddNewClient(npcAvatar, PresenceType.Npc);
|
||||||
|
|
||||||
|
ScenePresence sp;
|
||||||
|
if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
|
||||||
|
{
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);
|
||||||
|
|
||||||
|
sp.CompleteMovement(npcAvatar, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
|
||||||
|
}
|
||||||
|
|
||||||
m_avatars.Add(npcAvatar.AgentId, npcAvatar);
|
m_avatars.Add(npcAvatar.AgentId, npcAvatar);
|
||||||
|
}
|
||||||
|
|
||||||
m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
|
m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
|
||||||
|
</configSections>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="Neutral" />
|
||||||
|
<bindingRedirect oldVersion="2.0.6.0" newVersion="2.4.6.0" />
|
||||||
|
<bindingRedirect oldVersion="2.1.4.0" newVersion="2.4.6.0" />
|
||||||
|
<bindingRedirect oldVersion="2.2.8.0" newVersion="2.4.6.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
<log4net>
|
||||||
|
<!-- A1 is set to be a ConsoleAppender -->
|
||||||
|
<appender name="A1" type="log4net.Appender.ConsoleAppender">
|
||||||
|
|
||||||
|
<!-- A1 uses PatternLayout -->
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<!-- Print the date in ISO 8601 format -->
|
||||||
|
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- Set root logger level to DEBUG and its only appender to A1 -->
|
||||||
|
<root>
|
||||||
|
<level value="DEBUG" />
|
||||||
|
<appender-ref ref="A1" />
|
||||||
|
</root>
|
||||||
|
</log4net>
|
||||||
|
</configuration>
|
|
@ -218,6 +218,7 @@
|
||||||
|
|
||||||
<ReferencePath>../../../bin/</ReferencePath>
|
<ReferencePath>../../../bin/</ReferencePath>
|
||||||
<Reference name="System"/>
|
<Reference name="System"/>
|
||||||
|
<Reference name="System.Core"/>
|
||||||
<Reference name="System.Xml"/>
|
<Reference name="System.Xml"/>
|
||||||
<Reference name="log4net" path="../../../bin/"/>
|
<Reference name="log4net" path="../../../bin/"/>
|
||||||
<Reference name="OpenMetaverse" path="../../../bin/"/>
|
<Reference name="OpenMetaverse" path="../../../bin/"/>
|
||||||
|
|
Loading…
Reference in New Issue