From 94dc7d07ebc22ce0e0d9b77e91538ddc90799bee Mon Sep 17 00:00:00 2001
From: Dan Lake
Date: Thu, 3 Nov 2011 17:06:08 -0700
Subject: Renamed ForEachRootScenePresence to ForEachAvatar. Cleaned up calls
to the 3 iteration functions so more of them are using the correct iteration
for the action they are performing. The 3 iterators that seem to fit all
actions within OpenSim at this time are:
ForEachAvatar: Perform an action on all avatars (root presences)
ForEachClient: Perform an action on all clients (root or child clients)
ForEachRootClient: Perform an action on all clients that have an avatar
There are still a dozen places or so calling the old
ForEachScenePresence that will take a little more refactoring to
eliminate.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 76 ++++++++++++++------------------
1 file changed, 34 insertions(+), 42 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index dff43fd..b996e86 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -872,7 +872,7 @@ namespace OpenSim.Region.Framework.Scenes
try
{
- ForEachRootScenePresence(delegate(ScenePresence agent)
+ ForEachAvatar(delegate(ScenePresence agent)
{
//agent.ControllingClient.new
//this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo());
@@ -1017,7 +1017,7 @@ namespace OpenSim.Region.Framework.Scenes
GridRegion r = new GridRegion(region);
try
{
- ForEachRootScenePresence(delegate(ScenePresence agent)
+ ForEachAvatar(delegate(ScenePresence agent)
{
if (m_teleportModule != null)
m_teleportModule.EnableChildAgent(agent, r);
@@ -1423,12 +1423,10 @@ namespace OpenSim.Region.Framework.Scenes
/// Stats on the Simulator's performance
private void SendSimStatsPackets(SimStats stats)
{
- ForEachRootScenePresence(
- delegate(ScenePresence agent)
- {
- agent.ControllingClient.SendSimStats(stats);
- }
- );
+ ForEachRootClient(delegate(IClientAPI client)
+ {
+ client.SendSimStats(stats);
+ });
}
///
@@ -4214,35 +4212,32 @@ namespace OpenSim.Region.Framework.Scenes
return m_sceneGraph.GetScenePresence(localID);
}
+ ///
+ /// Returns true if scene presence is a child (no avatar in this scene)
+ ///
+ ///
+ ///
public override bool PresenceChildStatus(UUID avatarID)
{
- ScenePresence cp = GetScenePresence(avatarID);
-
- // FIXME: This is really crap - some logout code is relying on a NullReferenceException to halt its processing
- // This needs to be fixed properly by cleaning up the logout code.
- //if (cp != null)
- // return cp.IsChildAgent;
-
- //return false;
-
- return cp.IsChildAgent;
+ ScenePresence sp;
+ return TryGetScenePresence(avatarID, out sp) && sp.IsChildAgent;
}
///
- /// Performs action on all ROOT (not child) scene presences.
- /// This is just a shortcut function since frequently actions only appy to root SPs
+ /// Performs action on all avatars in the scene (root scene presences)
+ /// Avatars may be an NPC or a 'real' client.
///
///
- public void ForEachRootScenePresence(Action action)
+ public void ForEachAvatar(Action action)
{
if(m_sceneGraph != null)
{
- m_sceneGraph.ForEachRootScenePresence(action);
+ m_sceneGraph.ForEachAvatar(action);
}
}
///
- /// Performs action on all scene presences.
+ /// Performs action on all scene presences (root and child)
///
///
public void ForEachScenePresence(Action action)
@@ -4254,25 +4249,6 @@ namespace OpenSim.Region.Framework.Scenes
}
///
- /// Perform the given action for each object
- ///
- ///
- // public void ForEachObject(Action action)
- // {
- // List presenceList;
- //
- // lock (m_sceneObjects)
- // {
- // presenceList = new List(m_sceneObjects.Values);
- // }
- //
- // foreach (SceneObjectGroup presence in presenceList)
- // {
- // action(presence);
- // }
- // }
-
- ///
/// Get a group via its UUID
///
///
@@ -4344,6 +4320,22 @@ namespace OpenSim.Region.Framework.Scenes
return m_sceneGraph.TryGetAvatarByName(avatarName, out avatar);
}
+ ///
+ /// Perform an action on all clients with an avatar in this scene (root only)
+ ///
+ ///
+ public void ForEachRootClient(Action action)
+ {
+ ForEachAvatar(delegate(ScenePresence presence)
+ {
+ action(presence.ControllingClient);
+ });
+ }
+
+ ///
+ /// Perform an action on all clients connected to the region (root and child)
+ ///
+ ///
public void ForEachClient(Action action)
{
m_clientManager.ForEachSync(action);
--
cgit v1.1