From 7b6471f642a9fdc9c7835f15495017e351aff48b Mon Sep 17 00:00:00 2001
From: diva
Date: Wed, 17 Dec 2008 17:44:00 +0000
Subject: Kicking child agents off on the first login after a client crash. The
child agents kickoff was missing from when this is run in grid mode. But,
worse, turns out that this whole feature of kicking off the user after a
crash was entirely missing from standalone mode.
---
.../Communications/Local/LocalLoginService.cs | 25 +++++++++++++++++++++-
OpenSim/Region/Environment/Scenes/Scene.cs | 1 +
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/OpenSim/Region/Communications/Local/LocalLoginService.cs b/OpenSim/Region/Communications/Local/LocalLoginService.cs
index 9b71efd..e139501 100644
--- a/OpenSim/Region/Communications/Local/LocalLoginService.cs
+++ b/OpenSim/Region/Communications/Local/LocalLoginService.cs
@@ -57,7 +57,7 @@ namespace OpenSim.Region.Communications.Local
///
/// Used to make requests to the local regions.
///
- protected IGridServices m_gridService;
+ protected LocalBackEndServices m_gridService;
public event LoginToRegionEvent OnLoginToRegion;
@@ -376,5 +376,28 @@ namespace OpenSim.Region.Communications.Local
return new InventoryData(AgentInventoryArray, rootID);
}
+
+ public override void LogOffUser(UserProfileData theUser, string message)
+ {
+ RegionInfo SimInfo;
+ try
+ {
+ SimInfo = this.m_gridService.RequestNeighbourInfo(theUser.CurrentAgent.Handle);
+
+ if (SimInfo == null)
+ {
+ m_log.Error("[LOCAL LOGIN]: Region user was in isn't currently logged in");
+ return;
+ }
+ }
+ catch (Exception)
+ {
+ m_log.Error("[LOCAL LOGIN]: Unable to look up region to log user off");
+ return;
+ }
+
+ m_gridService.TriggerLogOffUser(SimInfo.RegionHandle, theUser.ID, theUser.CurrentAgent.SecureSessionID, "Logging you off");
+ }
+
}
}
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 6831885..3aa2470 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -2946,6 +2946,7 @@ namespace OpenSim.Region.Environment.Scenes
{
if (RegionSecret == loggingOffUser.ControllingClient.SecureSessionId)
{
+ m_sceneGridService.SendCloseChildAgentConnections(loggingOffUser.UUID, new List(loggingOffUser.KnownRegions.Keys));
loggingOffUser.ControllingClient.Kick(message);
// Give them a second to receive the message!
System.Threading.Thread.Sleep(1000);
--
cgit v1.1