diff options
author | Justin Clark-Casey (justincc) | 2013-09-27 19:14:21 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2013-09-27 19:14:21 +0100 |
commit | b16bc7b01ca0691758e66f85238d657f02271082 (patch) | |
tree | 4e121ace10b7dee25e1311268a84d3e95946f6f9 /OpenSim/Region/Framework/Scenes | |
parent | minor code formatting for the sake of consistency and readability (diff) | |
download | opensim-SC-b16bc7b01ca0691758e66f85238d657f02271082.zip opensim-SC-b16bc7b01ca0691758e66f85238d657f02271082.tar.gz opensim-SC-b16bc7b01ca0691758e66f85238d657f02271082.tar.bz2 opensim-SC-b16bc7b01ca0691758e66f85238d657f02271082.tar.xz |
refactor: rename Scene.IncomingCloseAgent() to CloseAgent() in order to make it clear that all non-clientstack callers should be using this rather than RemoveClient() in order to step through the ScenePresence state machine properly.
Adds IScene.CloseAgent() to replace RemoveClient()
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
4 files changed, 17 insertions, 29 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 3dc509b..82abfe9 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -1313,7 +1313,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1313 | Thread.Sleep(500); | 1313 | Thread.Sleep(500); |
1314 | 1314 | ||
1315 | // Stop all client threads. | 1315 | // Stop all client threads. |
1316 | ForEachScenePresence(delegate(ScenePresence avatar) { IncomingCloseAgent(avatar.UUID, false); }); | 1316 | ForEachScenePresence(delegate(ScenePresence avatar) { CloseAgent(avatar.UUID, false); }); |
1317 | 1317 | ||
1318 | m_log.Debug("[SCENE]: Persisting changed objects"); | 1318 | m_log.Debug("[SCENE]: Persisting changed objects"); |
1319 | EventManager.TriggerSceneShuttingDown(this); | 1319 | EventManager.TriggerSceneShuttingDown(this); |
@@ -2976,7 +2976,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2976 | { | 2976 | { |
2977 | PresenceService.LogoutAgent(sp.ControllingClient.SessionId); | 2977 | PresenceService.LogoutAgent(sp.ControllingClient.SessionId); |
2978 | 2978 | ||
2979 | IncomingCloseAgent(sp.UUID, false); | 2979 | CloseAgent(sp.UUID, false); |
2980 | } | 2980 | } |
2981 | else | 2981 | else |
2982 | { | 2982 | { |
@@ -3398,7 +3398,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3398 | /// <param name='closeChildAgents'> | 3398 | /// <param name='closeChildAgents'> |
3399 | /// Close the neighbour child agents associated with this client. | 3399 | /// Close the neighbour child agents associated with this client. |
3400 | /// </param> | 3400 | /// </param> |
3401 | public override void RemoveClient(UUID agentID, bool closeChildAgents) | 3401 | public void RemoveClient(UUID agentID, bool closeChildAgents) |
3402 | { | 3402 | { |
3403 | AgentCircuitData acd = m_authenticateHandler.GetAgentCircuitData(agentID); | 3403 | AgentCircuitData acd = m_authenticateHandler.GetAgentCircuitData(agentID); |
3404 | 3404 | ||
@@ -3783,7 +3783,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3783 | sp.Name, sp.UUID, RegionInfo.RegionName); | 3783 | sp.Name, sp.UUID, RegionInfo.RegionName); |
3784 | 3784 | ||
3785 | if (sp.ControllingClient != null) | 3785 | if (sp.ControllingClient != null) |
3786 | IncomingCloseAgent(sp.UUID, true); | 3786 | CloseAgent(sp.UUID, true); |
3787 | 3787 | ||
3788 | sp = null; | 3788 | sp = null; |
3789 | } | 3789 | } |
@@ -4424,7 +4424,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4424 | /// <param name="force"></param> | 4424 | /// <param name="force"></param> |
4425 | /// <param name="auth_token"></param> | 4425 | /// <param name="auth_token"></param> |
4426 | /// <returns></returns> | 4426 | /// <returns></returns> |
4427 | public bool IncomingCloseAgent(UUID agentID, bool force, string auth_token) | 4427 | public bool CloseAgent(UUID agentID, bool force, string auth_token) |
4428 | { | 4428 | { |
4429 | //m_log.DebugFormat("[SCENE]: Processing incoming close agent {0} in region {1} with auth_token {2}", agentID, RegionInfo.RegionName, auth_token); | 4429 | //m_log.DebugFormat("[SCENE]: Processing incoming close agent {0} in region {1} with auth_token {2}", agentID, RegionInfo.RegionName, auth_token); |
4430 | 4430 | ||
@@ -4442,7 +4442,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4442 | 4442 | ||
4443 | if (acd.SessionID.ToString() == auth_token) | 4443 | if (acd.SessionID.ToString() == auth_token) |
4444 | { | 4444 | { |
4445 | return IncomingCloseAgent(agentID, force); | 4445 | return CloseAgent(agentID, force); |
4446 | } | 4446 | } |
4447 | else | 4447 | else |
4448 | { | 4448 | { |
@@ -4455,16 +4455,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
4455 | } | 4455 | } |
4456 | 4456 | ||
4457 | /// <summary> | 4457 | /// <summary> |
4458 | /// Tell a single agent to prepare to close. | 4458 | /// Tell a single client to prepare to close. |
4459 | /// </summary> | 4459 | /// </summary> |
4460 | /// <remarks> | 4460 | /// <remarks> |
4461 | /// This should only be called if we may close the agent but there will be some delay in so doing. Meant for | 4461 | /// This should only be called if we may close the client but there will be some delay in so doing. Meant for |
4462 | /// internal use - other callers should almost certainly called IncomingCloseAgent(). | 4462 | /// internal use - other callers should almost certainly called CloseClient(). |
4463 | /// </remarks> | 4463 | /// </remarks> |
4464 | /// <param name="sp"></param> | 4464 | /// <param name="sp"></param> |
4465 | /// <returns>true if pre-close state notification was successful. false if the agent | 4465 | /// <returns>true if pre-close state notification was successful. false if the agent |
4466 | /// was not in a state where it could transition to pre-close.</returns> | 4466 | /// was not in a state where it could transition to pre-close.</returns> |
4467 | public bool IncomingPreCloseAgent(ScenePresence sp) | 4467 | public bool IncomingPreCloseClient(ScenePresence sp) |
4468 | { | 4468 | { |
4469 | lock (m_removeClientLock) | 4469 | lock (m_removeClientLock) |
4470 | { | 4470 | { |
@@ -4506,7 +4506,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4506 | /// Force the agent to close even if it might be in the middle of some other operation. You do not want to | 4506 | /// Force the agent to close even if it might be in the middle of some other operation. You do not want to |
4507 | /// force unless you are absolutely sure that the agent is dead and a normal close is not working. | 4507 | /// force unless you are absolutely sure that the agent is dead and a normal close is not working. |
4508 | /// </param> | 4508 | /// </param> |
4509 | public bool IncomingCloseAgent(UUID agentID, bool force) | 4509 | public override bool CloseAgent(UUID agentID, bool force) |
4510 | { | 4510 | { |
4511 | ScenePresence sp; | 4511 | ScenePresence sp; |
4512 | 4512 | ||
@@ -4517,7 +4517,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4517 | if (sp == null) | 4517 | if (sp == null) |
4518 | { | 4518 | { |
4519 | m_log.DebugFormat( | 4519 | m_log.DebugFormat( |
4520 | "[SCENE]: Called IncomingCloseAgent() with agent ID {0} but no such presence is in {1}", | 4520 | "[SCENE]: Called CloseClient() with agent ID {0} but no such presence is in {1}", |
4521 | agentID, Name); | 4521 | agentID, Name); |
4522 | 4522 | ||
4523 | return false; | 4523 | return false; |
@@ -4526,7 +4526,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4526 | if (sp.LifecycleState != ScenePresenceState.Running && sp.LifecycleState != ScenePresenceState.PreRemove) | 4526 | if (sp.LifecycleState != ScenePresenceState.Running && sp.LifecycleState != ScenePresenceState.PreRemove) |
4527 | { | 4527 | { |
4528 | m_log.DebugFormat( | 4528 | m_log.DebugFormat( |
4529 | "[SCENE]: Called IncomingCloseAgent() for {0} in {1} but presence is already in state {2}", | 4529 | "[SCENE]: Called CloseClient() for {0} in {1} but presence is already in state {2}", |
4530 | sp.Name, Name, sp.LifecycleState); | 4530 | sp.Name, Name, sp.LifecycleState); |
4531 | 4531 | ||
4532 | return false; | 4532 | return false; |
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index 5252b96..4b37983 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs | |||
@@ -218,19 +218,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
218 | 218 | ||
219 | public abstract ISceneAgent AddNewClient(IClientAPI client, PresenceType type); | 219 | public abstract ISceneAgent AddNewClient(IClientAPI client, PresenceType type); |
220 | 220 | ||
221 | /// <summary> | 221 | public abstract bool CloseAgent(UUID agentID, bool force); |
222 | /// Remove the given client from the scene. | ||
223 | /// </summary> | ||
224 | /// <remarks> | ||
225 | /// Only clientstack code should call this directly. All other code should call IncomingCloseAgent() instead | ||
226 | /// to properly operate the state machine and avoid race conditions with other close requests (such as directly | ||
227 | /// from viewers). | ||
228 | /// </remarks> | ||
229 | /// <param name='agentID'>ID of agent to close</param> | ||
230 | /// <param name='closeChildAgents'> | ||
231 | /// Close the neighbour child agents associated with this client. | ||
232 | /// </param> | ||
233 | public abstract void RemoveClient(UUID agentID, bool closeChildAgents); | ||
234 | 222 | ||
235 | public bool TryGetScenePresence(UUID agentID, out object scenePresence) | 223 | public bool TryGetScenePresence(UUID agentID, out object scenePresence) |
236 | { | 224 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs index bbe34d2..e25bcb7 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs | |||
@@ -146,7 +146,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
146 | } | 146 | } |
147 | 147 | ||
148 | [Test] | 148 | [Test] |
149 | public void TestCloseAgent() | 149 | public void TestCloseClient() |
150 | { | 150 | { |
151 | TestHelpers.InMethod(); | 151 | TestHelpers.InMethod(); |
152 | // TestHelpers.EnableLogging(); | 152 | // TestHelpers.EnableLogging(); |
@@ -154,7 +154,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
154 | TestScene scene = new SceneHelpers().SetupScene(); | 154 | TestScene scene = new SceneHelpers().SetupScene(); |
155 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); | 155 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); |
156 | 156 | ||
157 | scene.IncomingCloseAgent(sp.UUID, false); | 157 | scene.CloseAgent(sp.UUID, false); |
158 | 158 | ||
159 | Assert.That(scene.GetScenePresence(sp.UUID), Is.Null); | 159 | Assert.That(scene.GetScenePresence(sp.UUID), Is.Null); |
160 | Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(sp.UUID), Is.Null); | 160 | Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(sp.UUID), Is.Null); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCapabilityTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCapabilityTests.cs index b6fb730..4fdfc74 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCapabilityTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCapabilityTests.cs | |||
@@ -79,7 +79,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
79 | 79 | ||
80 | // TODO: Need to add tests for other ICapabiltiesModule methods. | 80 | // TODO: Need to add tests for other ICapabiltiesModule methods. |
81 | 81 | ||
82 | scene.IncomingCloseAgent(sp.UUID, false); | 82 | scene.CloseAgent(sp.UUID, false); |
83 | Assert.That(capsMod.GetCapsForUser(spUuid), Is.Null); | 83 | Assert.That(capsMod.GetCapsForUser(spUuid), Is.Null); |
84 | 84 | ||
85 | // TODO: Need to add tests for other ICapabiltiesModule methods. | 85 | // TODO: Need to add tests for other ICapabiltiesModule methods. |