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.
0.6.1-post-fixes
diva 2008-12-17 17:44:00 +00:00
parent ab77b22f0f
commit 7b6471f642
2 changed files with 25 additions and 1 deletions

View File

@ -57,7 +57,7 @@ namespace OpenSim.Region.Communications.Local
/// <summary>
/// Used to make requests to the local regions.
/// </summary>
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");
}
}
}

View File

@ -2946,6 +2946,7 @@ namespace OpenSim.Region.Environment.Scenes
{
if (RegionSecret == loggingOffUser.ControllingClient.SecureSessionId)
{
m_sceneGridService.SendCloseChildAgentConnections(loggingOffUser.UUID, new List<ulong>(loggingOffUser.KnownRegions.Keys));
loggingOffUser.ControllingClient.Kick(message);
// Give them a second to receive the message!
System.Threading.Thread.Sleep(1000);