public Deserialize ( OSDMap map ) : void | ||
map | OSDMap | An |
return | void |
public void Deserialize(OSDMap map)
{
OSDArray agentArray = (OSDArray)map["AgentData"];
OSDMap agentMap = (OSDMap)agentArray[0];
AgentID = agentMap["AgentID"].AsUUID();
OSDArray groupArray = (OSDArray)map["GroupData"];
GroupDataBlock = new GroupData[groupArray.Count];
for (int i = 0; i < groupArray.Count; i++)
{
OSDMap groupMap = (OSDMap)groupArray[i];
GroupData groupData = new GroupData();
groupData.GroupID = groupMap["GroupID"].AsUUID();
groupData.Contribution = groupMap["Contribution"].AsInteger();
groupData.GroupInsigniaID = groupMap["GroupInsigniaID"].AsUUID();
groupData.GroupName = groupMap["GroupName"].AsString();
groupData.GroupPowers = (GroupPowers)groupMap["GroupPowers"].AsLong();
groupData.AcceptNotices = groupMap["AcceptNotices"].AsBoolean();
GroupDataBlock[i] = groupData;
}
// If request for current groups came very close to login
// the Linden sim will not include the NewGroupData block, but
// it will instead set all ListInProfile fields to false
if (map.ContainsKey("NewGroupData"))
{
OSDArray newGroupArray = (OSDArray)map["NewGroupData"];
NewGroupDataBlock = new NewGroupData[newGroupArray.Count];
for (int i = 0; i < newGroupArray.Count; i++)
{
OSDMap newGroupMap = (OSDMap)newGroupArray[i];
NewGroupData newGroupData = new NewGroupData();
newGroupData.ListInProfile = newGroupMap["ListInProfile"].AsBoolean();
NewGroupDataBlock[i] = newGroupData;
}
}
else
{
NewGroupDataBlock = new NewGroupData[GroupDataBlock.Length];
for (int i = 0; i < NewGroupDataBlock.Length; i++)
{
NewGroupData newGroupData = new NewGroupData();
newGroupData.ListInProfile = false;
NewGroupDataBlock[i] = newGroupData;
}
}
}
}
public void AgentGroupDataUpdateMessage() { AgentGroupDataUpdateMessage s = new AgentGroupDataUpdateMessage(); s.AgentID = UUID.Random(); AgentGroupDataUpdateMessage.GroupData[] blocks = new AgentGroupDataUpdateMessage.GroupData[2]; AgentGroupDataUpdateMessage.GroupData g1 = new AgentGroupDataUpdateMessage.GroupData(); g1.AcceptNotices = false; g1.Contribution = 1024; g1.GroupID = UUID.Random(); g1.GroupInsigniaID = UUID.Random(); g1.GroupName = "Group Name Test 1"; g1.GroupPowers = GroupPowers.Accountable | GroupPowers.AllowLandmark | GroupPowers.AllowSetHome; blocks[0] = g1; AgentGroupDataUpdateMessage.GroupData g2 = new AgentGroupDataUpdateMessage.GroupData(); g2.AcceptNotices = false; g2.Contribution = 16; g2.GroupID = UUID.Random(); g2.GroupInsigniaID = UUID.Random(); g2.GroupName = "Group Name Test 2"; g2.GroupPowers = GroupPowers.ChangeActions | GroupPowers.DeedObject; blocks[1] = g2; s.GroupDataBlock = blocks; AgentGroupDataUpdateMessage.NewGroupData[] nblocks = new AgentGroupDataUpdateMessage.NewGroupData[2]; AgentGroupDataUpdateMessage.NewGroupData ng1 = new AgentGroupDataUpdateMessage.NewGroupData(); ng1.ListInProfile = false; nblocks[0] = ng1; AgentGroupDataUpdateMessage.NewGroupData ng2 = new AgentGroupDataUpdateMessage.NewGroupData(); ng2.ListInProfile = true; nblocks[1] = ng2; s.NewGroupDataBlock = nblocks; OSDMap map = s.Serialize(); AgentGroupDataUpdateMessage t = new AgentGroupDataUpdateMessage(); t.Deserialize(map); Assert.AreEqual(s.AgentID, t.AgentID); for (int i = 0; i < t.GroupDataBlock.Length; i++) { Assert.AreEqual(s.GroupDataBlock[i].AcceptNotices, t.GroupDataBlock[i].AcceptNotices); Assert.AreEqual(s.GroupDataBlock[i].Contribution, t.GroupDataBlock[i].Contribution); Assert.AreEqual(s.GroupDataBlock[i].GroupID, t.GroupDataBlock[i].GroupID); Assert.AreEqual(s.GroupDataBlock[i].GroupInsigniaID, t.GroupDataBlock[i].GroupInsigniaID); Assert.AreEqual(s.GroupDataBlock[i].GroupName, t.GroupDataBlock[i].GroupName); Assert.AreEqual(s.GroupDataBlock[i].GroupPowers, t.GroupDataBlock[i].GroupPowers); } for (int i = 0; i < t.NewGroupDataBlock.Length; i++) { Assert.AreEqual(s.NewGroupDataBlock[i].ListInProfile, t.NewGroupDataBlock[i].ListInProfile); } }