private void GroupMembersHandler(Packet packet, Simulator simulator)
{
GroupMembersReplyPacket members = (GroupMembersReplyPacket)packet;
Dictionary<UUID, GroupMember> groupMemberCache = null;
lock (GroupMembersRequests)
{
// If nothing is registered to receive this RequestID drop the data
if (GroupMembersRequests.Contains(members.GroupData.RequestID))
{
lock (GroupMembersCaches)
{
if (!GroupMembersCaches.TryGetValue(members.GroupData.RequestID, out groupMemberCache))
{
groupMemberCache = new Dictionary<UUID, GroupMember>();
GroupMembersCaches[members.GroupData.RequestID] = groupMemberCache;
}
foreach (GroupMembersReplyPacket.MemberDataBlock block in members.MemberData)
{
GroupMember groupMember = new GroupMember();
groupMember.ID = block.AgentID;
groupMember.Contribution = block.Contribution;
groupMember.IsOwner = block.IsOwner;
groupMember.OnlineStatus = Utils.BytesToString(block.OnlineStatus);
groupMember.Powers = (GroupPowers)block.AgentPowers;
groupMember.Title = Utils.BytesToString(block.Title);
groupMemberCache[block.AgentID] = groupMember;
}
if(groupMemberCache.Count >= members.GroupData.MemberCount)
GroupMembersRequests.Remove(members.GroupData.RequestID);
}
}
}
// Check if we've received all the group members that are showing up
if (OnGroupMembers != null && groupMemberCache != null && groupMemberCache.Count >= members.GroupData.MemberCount)
{
try { OnGroupMembers(groupMemberCache); }
catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); }
}
}