From 6d2893be67fd725090b69f5f31c0985c3d211135 Mon Sep 17 00:00:00 2001 From: Oren Hurvitz Date: Thu, 3 Apr 2014 12:47:20 +0300 Subject: When teleporting using Hypergrid, show more informative error messages in case of error --- .../Region/CoreModules/Avatar/Lure/HGLureModule.cs | 13 ++++++++++++- .../EntityTransfer/EntityTransferModule.cs | 15 ++++++++++----- .../EntityTransfer/HGEntityTransferModule.cs | 22 +++++++++++++++++----- 3 files changed, 39 insertions(+), 11 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs index a34f2d2..317f0e9 100644 --- a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs @@ -239,16 +239,27 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure GatekeeperServiceConnector gConn = new GatekeeperServiceConnector(); GridRegion gatekeeper = new GridRegion(); gatekeeper.ServerURI = url; - GridRegion finalDestination = gConn.GetHyperlinkRegion(gatekeeper, new UUID(im.RegionID)); + string message; + GridRegion finalDestination = gConn.GetHyperlinkRegion(gatekeeper, new UUID(im.RegionID), out message); if (finalDestination != null) { ScenePresence sp = scene.GetScenePresence(client.AgentId); IEntityTransferModule transferMod = scene.RequestModuleInterface(); if (transferMod != null && sp != null) + { + if (message != null) + sp.ControllingClient.SendAgentAlertMessage(message, true); + transferMod.DoTeleport( sp, gatekeeper, finalDestination, im.Position + new Vector3(0.5f, 0.5f, 0f), Vector3.UnitX, teleportflags); + } + } + else + { + m_log.InfoFormat("[HG LURE MODULE]: Lure failed: {0}", message); + client.SendAgentAlertMessage(message, true); } } } diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index caeb4f8..92ea62c 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -529,14 +529,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer if (reg != null) { - finalDestination = GetFinalDestination(reg); + string message; + finalDestination = GetFinalDestination(reg, out message); if (finalDestination == null) { - m_log.WarnFormat( "{0} Final destination is having problems. Unable to teleport {1} {2}", - LogHeader, sp.Name, sp.UUID); + m_log.WarnFormat( "{0} Final destination is having problems. Unable to teleport {1} {2}: {3}", + LogHeader, sp.Name, sp.UUID, message); - sp.ControllingClient.SendTeleportFailed("Problem at destination"); + sp.ControllingClient.SendTeleportFailed(message); return; } @@ -557,6 +558,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer return; } + if (message != null) + sp.ControllingClient.SendAgentAlertMessage(message, true); + // // This is it // @@ -1327,8 +1331,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer scene.SendKillObject(new List { localID }); } - protected virtual GridRegion GetFinalDestination(GridRegion region) + protected virtual GridRegion GetFinalDestination(GridRegion region, out string message) { + message = null; return region; } diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index e354522..fa05c90 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs @@ -225,19 +225,20 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer #region HG overrides of IEntiryTransferModule - protected override GridRegion GetFinalDestination(GridRegion region) + protected override GridRegion GetFinalDestination(GridRegion region, out string message) { int flags = Scene.GridService.GetRegionFlags(Scene.RegionInfo.ScopeID, region.RegionID); m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: region {0} flags: {1}", region.RegionName, flags); + message = null; if ((flags & (int)OpenSim.Framework.RegionFlags.Hyperlink) != 0) { m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Destination region is hyperlink"); - GridRegion real_destination = m_GatekeeperConnector.GetHyperlinkRegion(region, region.RegionID); + GridRegion real_destination = m_GatekeeperConnector.GetHyperlinkRegion(region, region.RegionID, out message); if (real_destination != null) - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: GetFinalDestination serveruri -> {0}", real_destination.ServerURI); + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: GetFinalDestination: ServerURI={0}", real_destination.ServerURI); else - m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: GetHyperlinkRegion to Gatekeeper {0} failed", region.ServerURI); + m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: GetHyperlinkRegion of region {0} from Gatekeeper {1} failed: {2}", region.RegionID, region.ServerURI, message); return real_destination; } @@ -533,7 +534,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer GatekeeperServiceConnector gConn = new GatekeeperServiceConnector(); GridRegion gatekeeper = new GridRegion(); gatekeeper.ServerURI = lm.Gatekeeper; - GridRegion finalDestination = gConn.GetHyperlinkRegion(gatekeeper, new UUID(lm.RegionID)); + string message; + GridRegion finalDestination = gConn.GetHyperlinkRegion(gatekeeper, new UUID(lm.RegionID), out message); if (finalDestination != null) { @@ -541,9 +543,19 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer IEntityTransferModule transferMod = scene.RequestModuleInterface(); if (transferMod != null && sp != null) + { + if (message != null) + sp.ControllingClient.SendAgentAlertMessage(message, true); + transferMod.DoTeleport( sp, gatekeeper, finalDestination, lm.Position, Vector3.UnitX, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaLandmark)); + } + } + else + { + remoteClient.SendTeleportFailed(message); + return; } } -- cgit v1.1