private void GroupRoleMembersHandler(Packet packet, Simulator simulator)
{
GroupRoleMembersReplyPacket members = (GroupRoleMembersReplyPacket)packet;
List<KeyValuePair<UUID, UUID>> groupRoleMemberCache = null;
try
{
lock (GroupRolesMembersRequests)
{
// If nothing is registered to receive this RequestID drop the data
if (GroupRolesMembersRequests.Contains(members.AgentData.RequestID))
{
GroupRolesMembersRequests.Remove(members.AgentData.RequestID);
if (!GroupRolesMembersRequests.Contains(members.AgentData.RequestID))
{
GroupRolesMembersRequests.Remove(members.AgentData.RequestID);
if (!GroupRolesMembersCaches.TryGetValue(members.AgentData.GroupID, out groupRoleMemberCache))
{
groupRoleMemberCache = new List<KeyValuePair<UUID, UUID>>();
GroupRolesMembersCaches[members.AgentData.GroupID] = groupRoleMemberCache;
}
}
foreach (GroupRoleMembersReplyPacket.MemberDataBlock block in members.MemberData)
{
KeyValuePair<UUID, UUID> rolemember =
new KeyValuePair<UUID, UUID>(block.RoleID, block.MemberID);
groupRoleMemberCache.Add(rolemember);
}
}
}
}
catch (Exception e)
{
Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e);
}
//Client.DebugLog("Pairs Ratio: " + groupRoleMemberCache.Count + "/" + members.AgentData.TotalPairs);
// Check if we've received all the pairs that are showing up
if (OnGroupRolesMembers != null && groupRoleMemberCache != null && groupRoleMemberCache.Count >= members.AgentData.TotalPairs)
{
try { OnGroupRolesMembers(groupRoleMemberCache); }
catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); }
}
}