aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/Scene.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs69
1 files changed, 32 insertions, 37 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 03f1ee2..b2c8dfd 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -131,7 +131,6 @@ namespace OpenSim.Region.Framework.Scenes
131 private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing 131 private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
132 private int m_incrementsof15seconds; 132 private int m_incrementsof15seconds;
133 private volatile bool m_backingup; 133 private volatile bool m_backingup;
134 private bool m_useAsyncWhenPossible;
135 134
136 private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>(); 135 private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>();
137 private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>(); 136 private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>();
@@ -656,9 +655,6 @@ namespace OpenSim.Region.Framework.Scenes
656 // 655 //
657 IConfig startupConfig = m_config.Configs["Startup"]; 656 IConfig startupConfig = m_config.Configs["Startup"];
658 657
659 // Should we try to run loops synchronously or asynchronously?
660 m_useAsyncWhenPossible = startupConfig.GetBoolean("use_async_when_possible", false);
661
662 //Animation states 658 //Animation states
663 m_useFlySlow = startupConfig.GetBoolean("enableflyslow", false); 659 m_useFlySlow = startupConfig.GetBoolean("enableflyslow", false);
664 // TODO: Change default to true once the feature is supported 660 // TODO: Change default to true once the feature is supported
@@ -3636,9 +3632,7 @@ namespace OpenSim.Region.Framework.Scenes
3636 public virtual void AgentCrossing(UUID agentID, Vector3 position, bool isFlying) 3632 public virtual void AgentCrossing(UUID agentID, Vector3 position, bool isFlying)
3637 { 3633 {
3638 ScenePresence presence; 3634 ScenePresence presence;
3639 m_sceneGraph.TryGetAvatar(agentID, out presence); 3635 if(m_sceneGraph.TryGetAvatar(agentID, out presence))
3640
3641 if (presence != null)
3642 { 3636 {
3643 try 3637 try
3644 { 3638 {
@@ -3813,9 +3807,7 @@ namespace OpenSim.Region.Framework.Scenes
3813 Vector3 lookAt, uint teleportFlags) 3807 Vector3 lookAt, uint teleportFlags)
3814 { 3808 {
3815 ScenePresence sp; 3809 ScenePresence sp;
3816 m_sceneGraph.TryGetAvatar(remoteClient.AgentId, out sp); 3810 if(m_sceneGraph.TryGetAvatar(remoteClient.AgentId, out sp))
3817
3818 if (sp != null)
3819 { 3811 {
3820 uint regionX = m_regInfo.RegionLocX; 3812 uint regionX = m_regInfo.RegionLocX;
3821 uint regionY = m_regInfo.RegionLocY; 3813 uint regionY = m_regInfo.RegionLocY;
@@ -4171,6 +4163,11 @@ namespace OpenSim.Region.Framework.Scenes
4171 4163
4172 //The idea is to have a group of method that return a list of avatars meeting some requirement 4164 //The idea is to have a group of method that return a list of avatars meeting some requirement
4173 // ie it could be all m_scenePresences within a certain range of the calling prim/avatar. 4165 // ie it could be all m_scenePresences within a certain range of the calling prim/avatar.
4166 //
4167 // GetAvatars returns a new list of all root agent presences in the scene
4168 // GetScenePresences returns a new list of all presences in the scene or a filter may be passed.
4169 // GetScenePresence returns the presence with matching UUID or first/last name.
4170 // ForEachScenePresence requests the Scene to run a delegate function against all presences.
4174 4171
4175 /// <summary> 4172 /// <summary>
4176 /// Return a list of all avatars in this region. 4173 /// Return a list of all avatars in this region.
@@ -4187,7 +4184,7 @@ namespace OpenSim.Region.Framework.Scenes
4187 /// This list is a new object, so it can be iterated over without locking. 4184 /// This list is a new object, so it can be iterated over without locking.
4188 /// </summary> 4185 /// </summary>
4189 /// <returns></returns> 4186 /// <returns></returns>
4190 public ScenePresence[] GetScenePresences() 4187 public List<ScenePresence> GetScenePresences()
4191 { 4188 {
4192 return m_sceneGraph.GetScenePresences(); 4189 return m_sceneGraph.GetScenePresences();
4193 } 4190 }
@@ -4213,6 +4210,28 @@ namespace OpenSim.Region.Framework.Scenes
4213 return m_sceneGraph.GetScenePresence(avatarID); 4210 return m_sceneGraph.GetScenePresence(avatarID);
4214 } 4211 }
4215 4212
4213 /// <summary>
4214 /// Request the ScenePresence in this region by first/last name.
4215 /// Should normally only be a single match, but first is always returned
4216 /// </summary>
4217 /// <param name="firstName"></param>
4218 /// <param name="lastName"></param>
4219 /// <returns></returns>
4220 public ScenePresence GetScenePresence(string firstName, string lastName)
4221 {
4222 return m_sceneGraph.GetScenePresence(firstName, lastName);
4223 }
4224
4225 /// <summary>
4226 /// Request the ScenePresence in this region by localID.
4227 /// </summary>
4228 /// <param name="localID"></param>
4229 /// <returns></returns>
4230 public ScenePresence GetScenePresence(uint localID)
4231 {
4232 return m_sceneGraph.GetScenePresence(localID);
4233 }
4234
4216 public override bool PresenceChildStatus(UUID avatarID) 4235 public override bool PresenceChildStatus(UUID avatarID)
4217 { 4236 {
4218 ScenePresence cp = GetScenePresence(avatarID); 4237 ScenePresence cp = GetScenePresence(avatarID);
@@ -4228,25 +4247,14 @@ namespace OpenSim.Region.Framework.Scenes
4228 } 4247 }
4229 4248
4230 /// <summary> 4249 /// <summary>
4231 /// 4250 /// Performs action on all scene presences.
4232 /// </summary> 4251 /// </summary>
4233 /// <param name="action"></param> 4252 /// <param name="action"></param>
4234 public void ForEachScenePresence(Action<ScenePresence> action) 4253 public void ForEachScenePresence(Action<ScenePresence> action)
4235 { 4254 {
4236 // We don't want to try to send messages if there are no avatars.
4237 if (m_sceneGraph != null) 4255 if (m_sceneGraph != null)
4238 { 4256 {
4239 try 4257 m_sceneGraph.ForEachScenePresence(action);
4240 {
4241 ScenePresence[] presences = GetScenePresences();
4242 for (int i = 0; i < presences.Length; i++)
4243 action(presences[i]);
4244 }
4245 catch (Exception e)
4246 {
4247 m_log.Info("[BUG] in " + RegionInfo.RegionName + ": " + e.ToString());
4248 m_log.Info("[BUG] Stack Trace: " + e.StackTrace);
4249 }
4250 } 4258 }
4251 } 4259 }
4252 4260
@@ -4322,20 +4330,7 @@ namespace OpenSim.Region.Framework.Scenes
4322 4330
4323 public void ForEachClient(Action<IClientAPI> action) 4331 public void ForEachClient(Action<IClientAPI> action)
4324 { 4332 {
4325 ForEachClient(action, m_useAsyncWhenPossible);
4326 }
4327
4328 public void ForEachClient(Action<IClientAPI> action, bool doAsynchronous)
4329 {
4330 // FIXME: Asynchronous iteration is disabled until we have a threading model that
4331 // can support calling this function from an async packet handler without
4332 // potentially deadlocking
4333 m_clientManager.ForEachSync(action); 4333 m_clientManager.ForEachSync(action);
4334
4335 //if (doAsynchronous)
4336 // m_clientManager.ForEach(action);
4337 //else
4338 // m_clientManager.ForEachSync(action);
4339 } 4334 }
4340 4335
4341 public bool TryGetClient(UUID avatarID, out IClientAPI client) 4336 public bool TryGetClient(UUID avatarID, out IClientAPI client)