コード例 #1
0
ファイル: Parcels.cs プロジェクト: jhurliman/simian
        private void ParcelAccessListUpdateHandler(Packet packet, LLAgent agent)
        {
            ParcelAccessListUpdatePacket update = (ParcelAccessListUpdatePacket)packet;
            ParcelAccessFlags            flags  = (ParcelAccessFlags)update.Data.Flags;

            SceneParcel parcel;

            if (m_parcels.TryGetParcel(update.Data.LocalID, out parcel))
            {
                // Initialize the white/black lists if they are not already
                if (parcel.AccessWhiteList == null)
                {
                    parcel.AccessWhiteList = new List <ParcelAccessEntry>();
                }
                if (parcel.AccessBlackList == null)
                {
                    parcel.AccessBlackList = new List <ParcelAccessEntry>();
                }

                List <ParcelAccessEntry> list = (flags == ParcelAccessFlags.Access)
                    ? parcel.AccessWhiteList
                    : parcel.AccessBlackList;

                lock (list)
                {
                    for (int i = 0; i < update.List.Length; i++)
                    {
                        UUID newEntry = update.List[i].ID;
                        bool found    = false;

                        foreach (ParcelAccessEntry pae in list)
                        {
                            if (pae.AgentID == newEntry)
                            {
                                found = true;
                                break;
                            }
                        }

                        if (!found)
                        {
                            list.Add(new ParcelAccessEntry {
                                AgentID = newEntry, Created = DateTime.UtcNow
                            });
                        }
                    }
                }
            }
            else
            {
                m_log.Warn(agent.Name + " tried to update access list for unknown parcel" + update.Data.LocalID);
            }
        }
コード例 #2
0
ファイル: Parcels.cs プロジェクト: jhurliman/simian
        private void ParcelAccessListRequestHandler(Packet packet, LLAgent agent)
        {
            ParcelAccessListRequestPacket request = (ParcelAccessListRequestPacket)packet;
            ParcelAccessFlags             flags   = (ParcelAccessFlags)request.Data.Flags;

            SceneParcel parcel;

            if (m_parcels.TryGetParcel(request.Data.LocalID, out parcel))
            {
                ParcelAccessListReplyPacket reply = new ParcelAccessListReplyPacket();
                reply.Data.AgentID    = agent.ID;
                reply.Data.Flags      = request.Data.Flags;
                reply.Data.LocalID    = request.Data.LocalID;
                reply.Data.SequenceID = request.Data.SequenceID;

                List <ParcelAccessEntry> list = (flags == ParcelAccessFlags.Access)
                    ? parcel.AccessWhiteList
                    : parcel.AccessBlackList;

                if (list != null)
                {
                    lock (list)
                    {
                        reply.List = new ParcelAccessListReplyPacket.ListBlock[list.Count];
                        for (int i = 0; i < list.Count; i++)
                        {
                            reply.List[i] = new ParcelAccessListReplyPacket.ListBlock
                            {
                                Flags = request.Data.Flags,
                                ID    = list[i].AgentID,
                                Time  = (int)Utils.DateTimeToUnixTime(list[i].Created)
                            };
                        }
                    }
                }
                else
                {
                    reply.List = new ParcelAccessListReplyPacket.ListBlock[0];
                }

                m_udp.SendPacket(agent, reply, ThrottleCategory.Task, true);
            }
            else
            {
                m_log.Warn(agent.Name + " requested access list for unknown parcel " + request.Data.LocalID);
            }
        }