public Deserialize ( OSDMap map ) : void | ||
map | OSDMap | An |
return | void |
public void Deserialize(OSDMap map)
{
OSDArray dataArray = (OSDArray)map["Data"];
// DataExtended is optional, will not exist of parcel contains zero prims
OSDArray dataExtendedArray;
if (map.ContainsKey("DataExtended"))
{
dataExtendedArray = (OSDArray)map["DataExtended"];
}
else
{
dataExtendedArray = new OSDArray();
}
PrimOwnersBlock = new PrimOwner[dataArray.Count];
for (int i = 0; i < dataArray.Count; i++)
{
OSDMap dataMap = (OSDMap)dataArray[i];
PrimOwner block = new PrimOwner();
block.OwnerID = dataMap["OwnerID"].AsUUID();
block.Count = dataMap["Count"].AsInteger();
block.IsGroupOwned = dataMap["IsGroupOwned"].AsBoolean();
block.OnlineStatus = dataMap["OnlineStatus"].AsBoolean(); // deprecated
/* if the agent has no permissions, or there are no prims, the counts
* should not match up, so we don't decode the DataExtended map */
if (dataExtendedArray.Count == dataArray.Count)
{
OSDMap dataExtendedMap = (OSDMap)dataExtendedArray[i];
block.TimeStamp = Utils.UnixTimeToDateTime(dataExtendedMap["TimeStamp"].AsUInteger());
}
PrimOwnersBlock[i] = block;
}
}
}
public void ParcelObjectOwnersMessage() { ParcelObjectOwnersReplyMessage s = new ParcelObjectOwnersReplyMessage(); s.PrimOwnersBlock = new ParcelObjectOwnersReplyMessage.PrimOwner[2]; ParcelObjectOwnersReplyMessage.PrimOwner obj = new ParcelObjectOwnersReplyMessage.PrimOwner(); obj.OwnerID = UUID.Random(); obj.Count = 10; obj.IsGroupOwned = true; obj.OnlineStatus = false; obj.TimeStamp = new DateTime(2010, 4, 13, 7, 19, 43); s.PrimOwnersBlock[0] = obj; ParcelObjectOwnersReplyMessage.PrimOwner obj1 = new ParcelObjectOwnersReplyMessage.PrimOwner(); obj1.OwnerID = UUID.Random(); obj1.Count = 0; obj1.IsGroupOwned = false; obj1.OnlineStatus = false; obj1.TimeStamp = new DateTime(1991, 1, 31, 3, 13, 31); s.PrimOwnersBlock[1] = obj1; OSDMap map = s.Serialize(); ParcelObjectOwnersReplyMessage t = new ParcelObjectOwnersReplyMessage(); t.Deserialize(map); for (int i = 0; i < t.PrimOwnersBlock.Length; i++) { Assert.AreEqual(s.PrimOwnersBlock[i].Count, t.PrimOwnersBlock[i].Count); Assert.AreEqual(s.PrimOwnersBlock[i].IsGroupOwned, t.PrimOwnersBlock[i].IsGroupOwned); Assert.AreEqual(s.PrimOwnersBlock[i].OnlineStatus, t.PrimOwnersBlock[i].OnlineStatus); Assert.AreEqual(s.PrimOwnersBlock[i].OwnerID, t.PrimOwnersBlock[i].OwnerID); Assert.AreEqual(s.PrimOwnersBlock[i].TimeStamp, t.PrimOwnersBlock[i].TimeStamp); } }