OpenMetaverse.GroupManager.GroupMembersHandler C# (CSharp) Method

GroupMembersHandler() private method

private GroupMembersHandler ( Packet packet, Simulator simulator ) : void
packet OpenMetaverse.Packets.Packet
simulator Simulator
return void
        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); }
            }
        }