From b98613091cd6dc2f914fb5ab38ca33cdff21fc24 Mon Sep 17 00:00:00 2001
From: Dan Lake
Date: Thu, 27 Oct 2011 00:42:21 -0700
Subject: Added new ForEachRootScenePresence to Scene since almost every
 delegate passed to ForEachScenePresence checks for !IsChildAgent first. It
 consolidates child and root handling for coming refactors.

---
 .../Region/CoreModules/Avatar/Chat/ChatModule.cs   |  7 +--
 .../Region/CoreModules/Avatar/Gods/GodsModule.cs   |  4 +-
 .../World/Estate/EstateManagementModule.cs         | 13 ++---
 .../Region/CoreModules/World/Land/LandObject.cs    |  5 +-
 .../Region/CoreModules/World/Sound/SoundModule.cs  | 10 +---
 OpenSim/Region/CoreModules/World/Sun/SunModule.cs  |  5 +-
 .../Region/CoreModules/World/Wind/WindModule.cs    |  5 +-
 .../CoreModules/World/WorldMap/WorldMapModule.cs   |  4 +-
 OpenSim/Region/Framework/Scenes/Scene.cs           | 60 +++++++++++-----------
 OpenSim/Region/Framework/Scenes/SceneGraph.cs      | 16 +++++-
 OpenSim/Region/Framework/Scenes/SceneManager.cs    |  9 ++--
 .../Avatar/Concierge/ConciergeModule.cs            |  5 +-
 .../RegionCombinerModule/RegionCombinerModule.cs   |  4 +-
 .../Shared/Api/Implementation/LSL_Api.cs           | 20 ++++----
 14 files changed, 79 insertions(+), 88 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
index 4359c01..2cd71c4 100644
--- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
@@ -279,12 +279,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
 
             HashSet<UUID> receiverIDs = new HashSet<UUID>();
             
-            ((Scene)c.Scene).ForEachScenePresence(
+            ((Scene)c.Scene).ForEachRootScenePresence(
                 delegate(ScenePresence presence)
-                {
-                    // ignore chat from child agents
-                    if (presence.IsChildAgent) return;
-                    
+                {   
                     IClientAPI client = presence.ControllingClient;
                     
                     // don't forward SayOwner chat from objects to
diff --git a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
index 5ec64d5..562c3b1 100644
--- a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
@@ -140,10 +140,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
                             // This is a bit crude. It seems the client will be null before it actually stops the thread
                             // The thread will kill itself eventually :/
                             // Is there another way to make sure *all* clients get this 'inter region' message?
-                            m_scene.ForEachScenePresence(
+                            m_scene.ForEachRootScenePresence(
                                 delegate(ScenePresence p)
                                 {
-                                    if (p.UUID != godID && !p.IsChildAgent)
+                                    if (p.UUID != godID)
                                     {
                                         // Possibly this should really be p.Close() though that method doesn't send a close
                                         // to the client
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index c199a77..5427b68 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -658,17 +658,15 @@ namespace OpenSim.Region.CoreModules.World.Estate
             if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false))
                 return;
 
-            Scene.ForEachScenePresence(delegate(ScenePresence sp)
+            Scene.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
                 if (sp.UUID != senderID)
                 {
-                    ScenePresence p = Scene.GetScenePresence(sp.UUID);
                     // make sure they are still there, we could be working down a long list
                     // Also make sure they are actually in the region
-                    if (p != null && !p.IsChildAgent)
-                    {
+                    ScenePresence p;
+                    if(Scene.TryGetScenePresence(sp.UUID, out p))
                         Scene.TeleportClientHome(p.UUID, p.ControllingClient);
-                    }
                 }
             });
         }
@@ -929,10 +927,9 @@ namespace OpenSim.Region.CoreModules.World.Estate
 
         public void sendRegionInfoPacketToAll()
         {
-            Scene.ForEachScenePresence(delegate(ScenePresence sp)
+            Scene.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
-                if (!sp.IsChildAgent)
-                    HandleRegionInfoRequest(sp.ControllingClient);
+                HandleRegionInfoRequest(sp.ControllingClient);
             });
         }
 
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index 8c40171..0da0de3 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -476,11 +476,8 @@ namespace OpenSim.Region.CoreModules.World.Land
 
         public void SendLandUpdateToAvatarsOverMe(bool snap_selection)
         {
-            m_scene.ForEachScenePresence(delegate(ScenePresence avatar)
+            m_scene.ForEachRootScenePresence(delegate(ScenePresence avatar)
             {
-                if (avatar.IsChildAgent)
-                    return;
-
                 ILandObject over = null;
                 try
                 {
diff --git a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
index 22ffcd6..93b1005 100644
--- a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
+++ b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
@@ -70,11 +70,8 @@ namespace OpenSim.Region.CoreModules.World.Sound
 
             SceneObjectGroup grp = part.ParentGroup;
 
-            m_scene.ForEachScenePresence(delegate(ScenePresence sp)
+            m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
-                if (sp.IsChildAgent)
-                    return;
-
                 double dis = Util.GetDistanceTo(sp.AbsolutePosition, position);
                 if (dis > 100.0) // Max audio distance
                     return;
@@ -122,11 +119,8 @@ namespace OpenSim.Region.CoreModules.World.Sound
                 }
             }
 
-            m_scene.ForEachScenePresence(delegate(ScenePresence sp)
+            m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
-                if (sp.IsChildAgent)
-                    return;
-
                 double dis = Util.GetDistanceTo(sp.AbsolutePosition, position);
                 if (dis > 100.0) // Max audio distance
                     return;
diff --git a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs
index 4e14c73..d2c1289 100644
--- a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs
+++ b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs
@@ -488,12 +488,9 @@ namespace OpenSim.Region.CoreModules
 
         private void SunUpdateToAllClients()
         {
-            m_scene.ForEachScenePresence(delegate(ScenePresence sp)
+            m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
-                if (!sp.IsChildAgent)
-                {
                     SunToClient(sp.ControllingClient);
-                }
             });
         }
 
diff --git a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs
index 6bac555..bea5db1 100644
--- a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs
+++ b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs
@@ -435,10 +435,9 @@ namespace OpenSim.Region.CoreModules
                         m_frameLastUpdateClientArray = m_frame;
                     }
 
-                    m_scene.ForEachScenePresence(delegate(ScenePresence sp)
+                    m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
                     {
-                        if (!sp.IsChildAgent)
-                            sp.ControllingClient.SendWindData(windSpeeds);
+                        sp.ControllingClient.SendWindData(windSpeeds);
                     });
                 }
             }
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index 857079c..509c0d8 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -401,10 +401,10 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
                     }
                     else
                     {
-                        m_scene.ForEachScenePresence(delegate(ScenePresence sp)
+                        m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
                         {
                             // Don't send a green dot for yourself
-                            if (!sp.IsChildAgent && sp.UUID != remoteClient.AgentId)
+                            if (sp.UUID != remoteClient.AgentId)
                             {
                                 mapitem = new mapItemReply();
                                 mapitem.x = (uint)(xstart + sp.AbsolutePosition.X);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index e43185d..302103a 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -893,22 +893,17 @@ namespace OpenSim.Region.Framework.Scenes
 
                     try
                     {
-                        ForEachScenePresence(delegate(ScenePresence agent)
-                                             {
-                                                 // If agent is a root agent.
-                                                 if (!agent.IsChildAgent)
-                                                 {
-                                                     //agent.ControllingClient.new
-                                                     //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo());
-
-                                                     List<ulong> old = new List<ulong>();
-                                                     old.Add(otherRegion.RegionHandle);
-                                                     agent.DropOldNeighbours(old);
-                                                     if (m_teleportModule != null)
-                                                         m_teleportModule.EnableChildAgent(agent, otherRegion);
-                                                 }
-                                             }
-                            );
+                        ForEachRootScenePresence(delegate(ScenePresence agent)
+                            {
+                                //agent.ControllingClient.new
+                                //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo());
+
+                                List<ulong> old = new List<ulong>();
+                                old.Add(otherRegion.RegionHandle);
+                                agent.DropOldNeighbours(old);
+                                if (m_teleportModule != null)
+                                    m_teleportModule.EnableChildAgent(agent, otherRegion);
+                            });
                     }
                     catch (NullReferenceException)
                     {
@@ -1043,16 +1038,11 @@ namespace OpenSim.Region.Framework.Scenes
                     GridRegion r = new GridRegion(region);
                     try
                     {
-                        ForEachScenePresence(delegate(ScenePresence agent)
-                                             {
-                                                 // If agent is a root agent.
-                                                 if (!agent.IsChildAgent)
-                                                 {
-                                                     if (m_teleportModule != null)
-                                                         m_teleportModule.EnableChildAgent(agent, r);
-                                                 }
-                                             }
-                            );
+                        ForEachRootScenePresence(delegate(ScenePresence agent)
+                            {
+                                if (m_teleportModule != null)
+                                        m_teleportModule.EnableChildAgent(agent, r);
+                            });
                     }
                     catch (NullReferenceException)
                     {
@@ -1456,11 +1446,10 @@ namespace OpenSim.Region.Framework.Scenes
         /// <param name="stats">Stats on the Simulator's performance</param>
         private void SendSimStatsPackets(SimStats stats)
         {
-            ForEachScenePresence(
+            ForEachRootScenePresence(
                 delegate(ScenePresence agent)
                 {
-                    if (!agent.IsChildAgent)
-                        agent.ControllingClient.SendSimStats(stats);
+                    agent.ControllingClient.SendSimStats(stats);
                 }
             );
         }
@@ -4290,6 +4279,19 @@ namespace OpenSim.Region.Framework.Scenes
         }
 
         /// <summary>
+        /// Performs action on all ROOT (not child) scene presences.
+        /// This is just a shortcut function since frequently actions only appy to root SPs
+        /// </summary>
+        /// <param name="action"></param>
+        public void ForEachRootScenePresence(Action<ScenePresence> action)
+        {
+            if(m_sceneGraph != null)
+            {
+                m_sceneGraph.ForEachRootScenePresence(action);
+            }
+        }
+
+        /// <summary>
         /// Performs action on all scene presences.
         /// </summary>
         /// <param name="action"></param>
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index caec704..542bd51 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -1190,7 +1190,21 @@ namespace OpenSim.Region.Framework.Scenes
                 }
             }
         }
-        
+
+        /// <summary>
+        /// Performs action on all ROOT (not child) scene presences.
+        /// This is just a shortcut function since frequently actions only appy to root SPs
+        /// </summary>
+        /// <param name="action"></param>
+        public void ForEachRootScenePresence(Action<ScenePresence> action)
+        {
+            ForEachScenePresence(delegate(ScenePresence sp)
+            {
+                if (!sp.IsChildAgent)
+                    action(sp);
+            });
+        }
+
         /// <summary>
         /// Performs action on all scene presences. This can ultimately run the actions in parallel but
         /// any delegates passed in will need to implement their own locking on data they reference and
diff --git a/OpenSim/Region/Framework/Scenes/SceneManager.cs b/OpenSim/Region/Framework/Scenes/SceneManager.cs
index a58b87d..3bfd866 100644
--- a/OpenSim/Region/Framework/Scenes/SceneManager.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneManager.cs
@@ -458,9 +458,9 @@ namespace OpenSim.Region.Framework.Scenes
             ForEachCurrentScene(
                 delegate(Scene scene)
                 {
-                    scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
+                    scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
                     {
-                        if (!scenePresence.IsChildAgent && (name == null || scenePresence.Name == name))
+                        if (name == null || scenePresence.Name == name)
                         {
                             m_log.DebugFormat("Packet debug for {0} {1} set to {2}",
                                               scenePresence.Firstname,
@@ -481,10 +481,9 @@ namespace OpenSim.Region.Framework.Scenes
             ForEachCurrentScene(
                 delegate(Scene scene)
                 {
-                    scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
+                    scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
                     {
-                        if (!scenePresence.IsChildAgent)
-                            avatars.Add(scenePresence);
+                        avatars.Add(scenePresence);
                     });
                 }
             );
diff --git a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs
index 0d6313a..e22618d 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs
@@ -373,13 +373,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.Concierge
                                           scene.GetRootAgentCount(), scene.RegionInfo.RegionName,
                                           scene.RegionInfo.RegionID,
                                           DateTime.UtcNow.ToString("s")));
-            scene.ForEachScenePresence(delegate(ScenePresence sp)
+            scene.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
-                if (!sp.IsChildAgent)
-                {
                     list.Append(String.Format("    <avatar name=\"{0}\" uuid=\"{1}\" />\n", sp.Name, sp.UUID));
                     list.Append("</avatars>");
-                }
             });
             string payload = list.ToString();
 
diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
index 4a24c7d..92cbbc6 100644
--- a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
+++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
@@ -711,10 +711,8 @@ namespace OpenSim.Region.RegionCombinerModule
 
             List<Vector3> CoarseLocations = new List<Vector3>();
             List<UUID> AvatarUUIDs = new List<UUID>();
-            connectiondata.RegionScene.ForEachScenePresence(delegate(ScenePresence sp)
+            connectiondata.RegionScene.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
-                if (sp.IsChildAgent)
-                    return;
                 if (sp.UUID != presence.UUID)
                 {
                     if (sp.ParentID != 0)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 82701ce..83c3b78 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -3723,9 +3723,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             m_host.AddScriptLPS(1);
             List<UUID> keytable = new List<UUID>();
             // parse for sitting avatare-uuids
-            World.ForEachScenePresence(delegate(ScenePresence presence)
+            World.ForEachRootScenePresence(delegate(ScenePresence presence)
             {
-                if (!presence.IsChildAgent && presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
+                if (presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
                     keytable.Add(presence.UUID);
             });
 
@@ -3785,9 +3785,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             m_host.AddScriptLPS(1);
             // parse for sitting avatare-names
             List<String> nametable = new List<String>();
-            World.ForEachScenePresence(delegate(ScenePresence presence)
+            World.ForEachRootScenePresence(delegate(ScenePresence presence)
             {
-                if (!presence.IsChildAgent && presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
+                if (presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
                     nametable.Add(presence.ControllingClient.Name);
             });
 
@@ -7568,9 +7568,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
         {
             m_host.AddScriptLPS(1);
             int avatarCount = 0;
-            World.ForEachScenePresence(delegate(ScenePresence presence)
+            World.ForEachRootScenePresence(delegate(ScenePresence presence)
             {
-                if (!presence.IsChildAgent && presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
+                if (presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
                         avatarCount++;
             });
 
@@ -9336,9 +9336,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
                     landObject.SetMediaUrl(url);
 
                     // now send to all (non-child) agents in the parcel
-                    World.ForEachScenePresence(delegate(ScenePresence sp)
+                    World.ForEachRootScenePresence(delegate(ScenePresence sp)
                     {
-                        if (!sp.IsChildAgent && (sp.currentParcelUUID == landData.GlobalID))
+                        if (sp.currentParcelUUID == landData.GlobalID)
                         {
                             sp.ControllingClient.SendParcelMediaUpdate(landData.MediaURL,
                                                                           landData.MediaID,
@@ -9369,9 +9369,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
                 if (presence == null)
                 {
                     // send to all (non-child) agents in the parcel
-                    World.ForEachScenePresence(delegate(ScenePresence sp)
+                    World.ForEachRootScenePresence(delegate(ScenePresence sp)
                     {
-                        if (!sp.IsChildAgent && (sp.currentParcelUUID == landData.GlobalID))
+                        if (sp.currentParcelUUID == landData.GlobalID)
                         {
                             sp.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this?
                                                                            (ParcelMediaCommandEnum)commandToSend,
-- 
cgit v1.1


From 06577d7299f38c342c9b241c691e647e5329837e Mon Sep 17 00:00:00 2001
From: Dan Lake
Date: Thu, 27 Oct 2011 01:25:12 -0700
Subject: Continuation of previous checkin. Found more places where
 ForEachScenePresence can be changed to ForEachRootScenePresence.

---
 .../CoreModules/Avatar/Dialog/DialogModule.cs      | 10 ++--
 OpenSim/Region/Framework/Scenes/SceneObjectPart.cs |  9 ++--
 OpenSim/Region/Framework/Scenes/ScenePresence.cs   | 53 ++++++++++------------
 .../Shared/Api/Implementation/OSSL_Api.cs          | 24 ++++------
 4 files changed, 39 insertions(+), 57 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs b/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs
index d2a0860..3ce446b 100644
--- a/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs
@@ -98,10 +98,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
         
         public void SendGeneralAlert(string message)
         {
-            m_scene.ForEachScenePresence(delegate(ScenePresence presence)
+            m_scene.ForEachRootScenePresence(delegate(ScenePresence presence)
             {
-                if (!presence.IsChildAgent)
-                    presence.ControllingClient.SendAlertMessage(message);
+                presence.ControllingClient.SendAlertMessage(message);
             });
         }
 
@@ -163,10 +162,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
         public void SendNotificationToUsersInRegion(
             UUID fromAvatarID, string fromAvatarName, string message)
         {
-            m_scene.ForEachScenePresence(delegate(ScenePresence presence)
+            m_scene.ForEachRootScenePresence(delegate(ScenePresence presence)
             {
-                if (!presence.IsChildAgent)
-                    presence.ControllingClient.SendBlueBoxMessage(fromAvatarID, fromAvatarName, message);
+                presence.ControllingClient.SendBlueBoxMessage(fromAvatarID, fromAvatarName, message);
             });
         }
         
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index c8ecc9b..3a4f52e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1440,10 +1440,9 @@ namespace OpenSim.Region.Framework.Scenes
             if (volume < 0)
                 volume = 0;
 
-            m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence sp)
+            m_parentGroup.Scene.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
-                if (!sp.IsChildAgent)
-                    sp.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume);
+                sp.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume);
             });
         }
 
@@ -2676,10 +2675,8 @@ namespace OpenSim.Region.Framework.Scenes
                 }
             }
 
-            m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence sp)
+            m_parentGroup.Scene.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
-                if (sp.IsChildAgent)
-                    return;
                 if (!(Util.GetDistanceTo(sp.AbsolutePosition, AbsolutePosition) >= 100))
                     sp.ControllingClient.SendPreLoadSound(objectID, objectID, soundID);
             });
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index ee6c708..3834b79 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2598,19 +2598,15 @@ namespace OpenSim.Region.Framework.Scenes
         public void SendOtherAgentsAvatarDataToMe()
         {
             int count = 0;
-            m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
-                                         {
-                                             // only send information about root agents
-                                             if (scenePresence.IsChildAgent)
-                                                 return;
-                                             
-                                             // only send information about other root agents
-                                             if (scenePresence.UUID == UUID)
-                                                 return;
+            m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
+                        {
+                            // only send information about other root agents
+                            if (scenePresence.UUID == UUID)
+                                return;
                                              
-                                             scenePresence.SendAvatarDataToAgent(this);
-                                             count++;
-                                         });
+                            scenePresence.SendAvatarDataToAgent(this);
+                            count++;
+                        });
 
             m_scene.StatsReporter.AddAgentUpdates(count);
         }
@@ -2644,13 +2640,14 @@ namespace OpenSim.Region.Framework.Scenes
 
             int count = 0;
             m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
-                                         {
-                                             if (scenePresence.UUID == UUID)
-                                                 return;
+                        {
+                            // only send information to other root agents
+                            if (scenePresence.UUID == UUID)
+                                return;
 
-                                             SendAppearanceToAgent(scenePresence);
-                                             count++;
-                                         });
+                            SendAppearanceToAgent(scenePresence);
+                            count++;
+                        });
 
             m_scene.StatsReporter.AddAgentUpdates(count);
         }
@@ -2664,19 +2661,15 @@ namespace OpenSim.Region.Framework.Scenes
             //m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} ({1})", Name, UUID);
 
             int count = 0;
-            m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
-                                         {
-                                             // only send information about root agents
-                                             if (scenePresence.IsChildAgent)
-                                                 return;
-                                             
-                                             // only send information about other root agents
-                                             if (scenePresence.UUID == UUID)
-                                                 return;
+            m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
+                        {
+                            // only send information about other root agents
+                            if (scenePresence.UUID == UUID)
+                                return;
                                              
-                                             scenePresence.SendAppearanceToAgent(this);
-                                             count++;
-                                         });
+                            scenePresence.SendAppearanceToAgent(this);
+                            count++;
+                        });
 
             m_scene.StatsReporter.AddAgentUpdates(count);
         }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 3cfc3c9..654f168 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -873,10 +873,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             CheckThreatLevel(ThreatLevel.None, "osGetAgents");
 
             LSL_List result = new LSL_List();
-            World.ForEachScenePresence(delegate(ScenePresence sp)
+            World.ForEachRootScenePresence(delegate(ScenePresence sp)
             {
-                if (!sp.IsChildAgent)
-                    result.Add(new LSL_String(sp.Name));
+                result.Add(new LSL_String(sp.Name));
             });
             return result;
         }
@@ -2582,11 +2581,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar");
             if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID))
             {
-                World.ForEachScenePresence(delegate(ScenePresence sp)
+                World.ForEachRootScenePresence(delegate(ScenePresence sp)
                 {
-                    if (!sp.IsChildAgent &&
-                        sp.Firstname == FirstName &&
-                        sp.Lastname == SurName)
+                    if (sp.Firstname == FirstName && sp.Lastname == SurName)
                     {
                         // kick client...
                         if (alert != null)
@@ -2718,17 +2715,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             CheckThreatLevel(ThreatLevel.None, "osGetAvatarList");
 
             LSL_List result = new LSL_List();
-            World.ForEachScenePresence(delegate (ScenePresence avatar)
+            World.ForEachRootScenePresence(delegate (ScenePresence avatar)
             {
                 if (avatar != null && avatar.UUID != m_host.OwnerID)
                 {
-                    if (avatar.IsChildAgent == false)
-                    {
-                        result.Add(new LSL_String(avatar.UUID.ToString()));
-                        OpenMetaverse.Vector3 ap = avatar.AbsolutePosition;
-                        result.Add(new LSL_Vector(ap.X, ap.Y, ap.Z));
-                        result.Add(new LSL_String(avatar.Name));
-                    }
+                    result.Add(new LSL_String(avatar.UUID.ToString()));
+                    OpenMetaverse.Vector3 ap = avatar.AbsolutePosition;
+                    result.Add(new LSL_Vector(ap.X, ap.Y, ap.Z));
+                    result.Add(new LSL_String(avatar.Name));
                 }
             });
 
-- 
cgit v1.1


From 272bf712796ad8e98e79aee50311a84deaf23d79 Mon Sep 17 00:00:00 2001
From: Dan Lake
Date: Thu, 27 Oct 2011 02:26:37 -0700
Subject: Removed use of 'is' operator and casting to find the root
 ScenePresence in MessageTransfer modules and Groups module.

---
 .../InstantMessage/HGMessageTransferModule.cs      | 57 +++++++++-------------
 .../Avatar/InstantMessage/MessageTransferModule.cs | 52 ++++++++------------
 .../Avatar/XmlRpcGroups/GroupsMessagingModule.cs   | 15 +++---
 .../Avatar/XmlRpcGroups/GroupsModule.cs            | 11 ++---
 4 files changed, 53 insertions(+), 82 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs
index 72b448b..321a705 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs
@@ -143,24 +143,19 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
             // Try root avatar only first
             foreach (Scene scene in m_Scenes)
             {
-                if (scene.Entities.ContainsKey(toAgentID) &&
-                        scene.Entities[toAgentID] is ScenePresence)
-                {
-//                    m_log.DebugFormat(
-//                        "[HG INSTANT MESSAGE]: Looking for root agent {0} in {1}", 
-//                        toAgentID.ToString(), scene.RegionInfo.RegionName);
-                                        
-                    ScenePresence user = (ScenePresence) scene.Entities[toAgentID];
-                    if (!user.IsChildAgent)
-                    {
-                        // Local message
-//                        m_log.DebugFormat("[HG INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", user.Name, toAgentID);
-                        user.ControllingClient.SendInstantMessage(im);
+//                m_log.DebugFormat(
+//                    "[HG INSTANT MESSAGE]: Looking for root agent {0} in {1}", 
+//                    toAgentID.ToString(), scene.RegionInfo.RegionName);
+                ScenePresence sp = scene.GetScenePresence(toAgentID); 
+                if (sp != null && !sp.IsChildAgent)
+                {                                        
+                    // Local message
+//                  m_log.DebugFormat("[HG INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", user.Name, toAgentID);
+                    sp.ControllingClient.SendInstantMessage(im);
 
-                        // Message sent
-                        result(true);
-                        return;
-                    }
+                    // Message sent
+                    result(true);
+                    return;
                 }
             }
 
@@ -168,16 +163,14 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
             foreach (Scene scene in m_Scenes)
             {
 //                m_log.DebugFormat(
-//                    "[HG INSTANT MESSAGE]: Looking for child of {0} in {1}", toAgentID, scene.RegionInfo.RegionName);
-
-                if (scene.Entities.ContainsKey(toAgentID) &&
-                        scene.Entities[toAgentID] is ScenePresence)
-                {
+//                    "[HG INSTANT MESSAGE]: Looking for child of {0} in {1}", 
+//                    toAgentID, scene.RegionInfo.RegionName);
+                ScenePresence sp = scene.GetScenePresence(toAgentID); 
+                if (sp != null)
+                {                   
                     // Local message
-                    ScenePresence user = (ScenePresence) scene.Entities[toAgentID];
-
 //                    m_log.DebugFormat("[HG INSTANT MESSAGE]: Delivering IM to child agent {0} {1}", user.Name, toAgentID);
-                    user.ControllingClient.SendInstantMessage(im);
+                    sp.ControllingClient.SendInstantMessage(im);
 
                     // Message sent
                     result(true);
@@ -231,17 +224,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
             bool successful = false;
             foreach (Scene scene in m_Scenes)
             {
-                if (scene.Entities.ContainsKey(toAgentID) &&
-                        scene.Entities[toAgentID] is ScenePresence)
+                ScenePresence sp = scene.GetScenePresence(toAgentID);
+                if(!sp.IsChildAgent)
                 {
-                    ScenePresence user =
-                            (ScenePresence)scene.Entities[toAgentID];
-
-                    if (!user.IsChildAgent)
-                    {
-                        scene.EventManager.TriggerIncomingInstantMessage(gim);
-                        successful = true;
-                    }
+                    scene.EventManager.TriggerIncomingInstantMessage(gim);
+                    successful = true;
                 }
             }
             if (!successful)
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index 45b84f4..0dad3c4 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
@@ -136,24 +136,19 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
             // Try root avatar only first
             foreach (Scene scene in m_Scenes)
             {
-                if (scene.Entities.ContainsKey(toAgentID) &&
-                        scene.Entities[toAgentID] is ScenePresence)
+//                m_log.DebugFormat(
+//                    "[INSTANT MESSAGE]: Looking for root agent {0} in {1}", 
+//                    toAgentID.ToString(), scene.RegionInfo.RegionName);
+                ScenePresence sp = scene.GetScenePresence(toAgentID);
+                if (sp != null && !sp.IsChildAgent)
                 {
-//                    m_log.DebugFormat(
-//                        "[INSTANT MESSAGE]: Looking for root agent {0} in {1}", 
-//                        toAgentID.ToString(), scene.RegionInfo.RegionName);
-                                        
-                    ScenePresence user = (ScenePresence) scene.Entities[toAgentID];
-                    if (!user.IsChildAgent)
-                    {
-                        // Local message
-//                        m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", user.Name, toAgentID);
-                        user.ControllingClient.SendInstantMessage(im);
-
-                        // Message sent
-                        result(true);
-                        return;
-                    }
+                    // Local message
+//                    m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", user.Name, toAgentID);
+                    sp.ControllingClient.SendInstantMessage(im);
+
+                    // Message sent
+                    result(true);
+                    return;
                 }
             }
 
@@ -162,15 +157,12 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
             {
 //                m_log.DebugFormat(
 //                    "[INSTANT MESSAGE]: Looking for child of {0} in {1}", toAgentID, scene.RegionInfo.RegionName);
-
-                if (scene.Entities.ContainsKey(toAgentID) &&
-                        scene.Entities[toAgentID] is ScenePresence)
+                ScenePresence sp = scene.GetScenePresence(toAgentID);
+                if (sp != null)
                 {
                     // Local message
-                    ScenePresence user = (ScenePresence) scene.Entities[toAgentID];
-
 //                    m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to child agent {0} {1}", user.Name, toAgentID);
-                    user.ControllingClient.SendInstantMessage(im);
+                    sp.ControllingClient.SendInstantMessage(im);
 
                     // Message sent
                     result(true);
@@ -389,17 +381,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
                     // Trigger the Instant message in the scene.
                     foreach (Scene scene in m_Scenes)
                     {
-                        if (scene.Entities.ContainsKey(toAgentID) &&
-                                scene.Entities[toAgentID] is ScenePresence)
+                        ScenePresence sp = scene.GetScenePresence(toAgentID);
+                        if (sp != null && !sp.IsChildAgent)
                         {
-                            ScenePresence user =
-                                    (ScenePresence)scene.Entities[toAgentID];
-
-                            if (!user.IsChildAgent)
-                            {
-                                scene.EventManager.TriggerIncomingInstantMessage(gim);
-                                successful = true;
-                            }
+                            scene.EventManager.TriggerIncomingInstantMessage(gim);
+                            successful = true;
                         }
                     }
                     if (!successful)
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs
index a12e6ea..10b83e6 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs
@@ -504,19 +504,18 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
             // Try root avatar first
             foreach (Scene scene in m_sceneList)
             {
-                if (scene.Entities.ContainsKey(agentID) &&
-                    scene.Entities[agentID] is ScenePresence)
+                ScenePresence sp = scene.GetScenePresence(agentID);
+                if (sp != null)
                 {
-                    ScenePresence user = (ScenePresence)scene.Entities[agentID];
-                    if (!user.IsChildAgent)
+                    if (!sp.IsChildAgent)
                     {
-                        if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found root agent for client : {0}", user.ControllingClient.Name);
-                        return user.ControllingClient;
+                        if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found root agent for client : {0}", sp.ControllingClient.Name);
+                        return sp.ControllingClient;
                     }
                     else
                     {
-                        if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found child agent for client : {0}", user.ControllingClient.Name);
-                        child = user.ControllingClient;
+                        if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found child agent for client : {0}", sp.ControllingClient.Name);
+                        child = sp.ControllingClient;
                     }
                 }
             }
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index 630fcab..b2c0f48 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -1076,17 +1076,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
             // Try root avatar first
             foreach (Scene scene in m_sceneList)
             {
-                if (scene.Entities.ContainsKey(agentID) &&
-                        scene.Entities[agentID] is ScenePresence)
+                ScenePresence sp = scene.GetScenePresence(agentID);
+                if (sp != null)
                 {
-                    ScenePresence user = (ScenePresence)scene.Entities[agentID];
-                    if (!user.IsChildAgent)
+                    if (!sp.IsChildAgent)
                     {
-                        return user.ControllingClient;
+                        return sp.ControllingClient;
                     }
                     else
                     {
-                        child = user.ControllingClient;
+                        child = sp.ControllingClient;
                     }
                 }
             }
-- 
cgit v1.1