private void AddFlag(ref PresenceInfo info, PresenceInfo.PresenceInfoFlags presenceInfoFlags)
 {
     if (presenceInfoFlags == 0)
     {
         return;
     }
     info.Flags &= PresenceInfo.PresenceInfoFlags.Clean; //Remove clean
     if (presenceInfoFlags == PresenceInfo.PresenceInfoFlags.Known)
     {
         info.Flags &= PresenceInfo.PresenceInfoFlags.Clean; //Remove suspected as well
     }
     info.Flags |= presenceInfoFlags;                        //Add the flag
 }
Ejemplo n.º 2
0
        public void SetUserLevel(UUID AgentID, PresenceInfo.PresenceInfoFlags presenceInfoFlags)
        {
            if (!m_enabled)
            {
                return;
            }
            //Get
            PresenceInfo info = GetInformation(AgentID);

            //Set the flags
            info.Flags = presenceInfoFlags;
            //Save
            presenceInfo.UpdatePresenceInfo(info);
        }
Ejemplo n.º 3
0
        public void SetUserLevel(UUID agentID, PresenceInfo.PresenceInfoFlags presenceInfoFlags)
        {
            if (!m_enabled)
            {
                return;
            }

            PresenceInfo info = GetInformation(agentID);

            if (info != null)
            {
                info.Flags = presenceInfoFlags;
                presenceInfo.UpdatePresenceInfo(info);
            }
        }
Ejemplo n.º 4
0
        void CoralateLists(PresenceInfo info, PresenceInfo suspectedInfo)
        {
            bool addedFlag = false;
            const PresenceInfo.PresenceInfoFlags INFOFLAG = 0;

            if ((suspectedInfo.Flags & PresenceInfo.PresenceInfoFlags.Clean) == PresenceInfo.PresenceInfoFlags.Clean &&
                (info.Flags & PresenceInfo.PresenceInfoFlags.Clean) == PresenceInfo.PresenceInfoFlags.Clean)
            {
                //They are both clean, do nothing
            }
            else if ((suspectedInfo.Flags & PresenceInfo.PresenceInfoFlags.Suspected) ==
                     PresenceInfo.PresenceInfoFlags.Suspected ||
                     (info.Flags & PresenceInfo.PresenceInfoFlags.Suspected) == PresenceInfo.PresenceInfoFlags.Suspected)
            {
                //Suspected, update them both
                addedFlag = true;
                AddFlag(ref info, PresenceInfo.PresenceInfoFlags.Suspected);
                AddFlag(ref suspectedInfo, PresenceInfo.PresenceInfoFlags.Suspected);
            }
            else if ((suspectedInfo.Flags & PresenceInfo.PresenceInfoFlags.Known) ==
                     PresenceInfo.PresenceInfoFlags.Known ||
                     (info.Flags & PresenceInfo.PresenceInfoFlags.Known) == PresenceInfo.PresenceInfoFlags.Known)
            {
                //Known, update them both
                addedFlag = true;
                AddFlag(ref info, PresenceInfo.PresenceInfoFlags.Known);
                AddFlag(ref suspectedInfo, PresenceInfo.PresenceInfoFlags.Known);
            }

            //Add the alt account flag
            AddFlag(ref info, PresenceInfo.PresenceInfoFlags.SuspectedAltAccount);
            AddFlag(ref suspectedInfo, PresenceInfo.PresenceInfoFlags.SuspectedAltAccount);

            if (suspectedInfo.Flags == PresenceInfo.PresenceInfoFlags.Suspected ||
                suspectedInfo.Flags == PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfSuspected ||
                info.Flags == PresenceInfo.PresenceInfoFlags.Suspected ||
                info.Flags == PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfSuspected)
            {
                //They might be an alt, but the other is clean, so don't bother them too much
                AddFlag(ref info, PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfSuspected);
                AddFlag(ref suspectedInfo, PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfSuspected);
            }
            else if (suspectedInfo.Flags == PresenceInfo.PresenceInfoFlags.Known ||
                     suspectedInfo.Flags == PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfKnown ||
                     info.Flags == PresenceInfo.PresenceInfoFlags.Known ||
                     info.Flags == PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfKnown)
            {
                //Flag them
                AddFlag(ref info, PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfKnown);
                AddFlag(ref suspectedInfo, PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfKnown);
            }

            //Add the lists together
            List <string> alts = new List <string> ();

            foreach (string alt in info.KnownAlts)
            {
                if (!alts.Contains(alt))
                {
                    alts.Add(alt);
                }
            }

            foreach (string alt in suspectedInfo.KnownAlts)
            {
                if (!alts.Contains(alt))
                {
                    alts.Add(alt);
                }
            }

            if (!alts.Contains(suspectedInfo.AgentID.ToString()))
            {
                alts.Add(suspectedInfo.AgentID.ToString());
            }
            if (!alts.Contains(info.AgentID.ToString()))
            {
                alts.Add(info.AgentID.ToString());
            }

            //If we have added a flag, we need to update ALL alts as well
            if (addedFlag || alts.Count != 0)
            {
                foreach (
                    string alt in alts.Where(s => s != suspectedInfo.AgentID.ToString() && s != info.AgentID.ToString())
                    )
                {
                    PresenceInfo altInfo = GetPresenceInfo(UUID.Parse(alt));
                    if (altInfo != null)
                    {
                        //Give them the flag as well
                        AddFlag(ref altInfo, INFOFLAG);

                        //Add the alt account flag
                        AddFlag(ref altInfo, PresenceInfo.PresenceInfoFlags.SuspectedAltAccount);

                        //Also give them the flags for alts
                        if (suspectedInfo.Flags == PresenceInfo.PresenceInfoFlags.Suspected ||
                            suspectedInfo.Flags == PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfSuspected ||
                            info.Flags == PresenceInfo.PresenceInfoFlags.Suspected ||
                            info.Flags == PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfSuspected)
                        {
                            //They might be an alt, but the other is clean, so don't bother them too much
                            AddFlag(ref altInfo, PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfSuspected);
                        }
                        else if (suspectedInfo.Flags == PresenceInfo.PresenceInfoFlags.Known ||
                                 suspectedInfo.Flags == PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfKnown ||
                                 info.Flags == PresenceInfo.PresenceInfoFlags.Known ||
                                 info.Flags == PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfKnown)
                        {
                            //Flag them
                            AddFlag(ref altInfo, PresenceInfo.PresenceInfoFlags.SuspectedAltAccountOfKnown);
                        }
                        altInfo.KnownAlts = new List <string> (alts.Where(s => s != altInfo.AgentID.ToString()));

                        //And update them in the db
                        UpdatePresenceInfo(altInfo);
                    }
                }
            }

            //Replace both lists now that they are merged
            info.KnownAlts          = new List <string> (alts.Where(s => s != info.AgentID.ToString()));
            suspectedInfo.KnownAlts = new List <string> (alts.Where(s => s != suspectedInfo.AgentID.ToString()));

            //Update them, as we changed their info, we get updated below
            UpdatePresenceInfo(suspectedInfo);
        }