From 093adb2113d748f28554393cc8a6fe53502126dc Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Thu, 15 Jan 2009 21:27:55 +0000 Subject: [PATCH] * Add new unit test for simple teleport in a standalone. * Does not yet check results. --- .../ClientStack/LindenUDP/LLClientView.cs | 1 + .../Local/LocalBackEndServices.cs | 1 + .../Local/LocalInterregionComms.cs | 9 +++--- OpenSim/Region/Environment/Scenes/Scene.cs | 4 ++- .../Scenes/SceneCommunicationService.cs | 2 +- .../Environment/Scenes/ScenePresence.cs | 2 -- .../Scenes/Tests/EntityManagerTests.cs | 4 +-- .../Scenes/Tests/SceneTestUtils.cs | 32 ++++++++++++++----- OpenSim/Tests/Common/Mock/TestClient.cs | 11 +++++++ .../Common/Mock/TestCommunicationsManager.cs | 3 +- 10 files changed, 49 insertions(+), 20 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index ebbecb79fc..30f6f0fad5 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -5824,6 +5824,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; + case PacketType.TeleportLocationRequest: TeleportLocationRequestPacket tpLocReq = (TeleportLocationRequestPacket)Pack; // Console.WriteLine(tpLocReq.ToString()); diff --git a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs index 552f8c37c9..6a3b80df4d 100644 --- a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs +++ b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs @@ -250,6 +250,7 @@ namespace OpenSim.Region.Communications.Local { return m_regionListeners[regionHandle].TriggerTellRegionToCloseChildConnection(agentID); } + return false; } diff --git a/OpenSim/Region/Environment/Modules/Communications/Local/LocalInterregionComms.cs b/OpenSim/Region/Environment/Modules/Communications/Local/LocalInterregionComms.cs index efc5c39e6f..5fcb4bc1aa 100644 --- a/OpenSim/Region/Environment/Modules/Communications/Local/LocalInterregionComms.cs +++ b/OpenSim/Region/Environment/Modules/Communications/Local/LocalInterregionComms.cs @@ -75,7 +75,6 @@ namespace OpenSim.Region.Environment.Modules.Communications.Local return; Init(scene); - } public void PostInitialise() @@ -119,17 +118,17 @@ namespace OpenSim.Region.Environment.Modules.Communications.Local #region IInterregionComms public bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit) - { + { foreach (Scene s in m_sceneList) - { + { if (s.RegionInfo.RegionHandle == regionHandle) { - //m_log.Debug("[LOCAL COMMS]: Found region to send SendCreateChildAgent"); +// m_log.DebugFormat("[LOCAL COMMS]: Found region {0} to send SendCreateChildAgent", regionHandle); s.NewUserConnection(aCircuit); return true; } } - //m_log.Debug("[LOCAL COMMS]: region not found for SendCreateChildAgent"); +// m_log.DebugFormat("[LOCAL COMMS]: Did not find region {0} for SendCreateChildAgent", regionHandle); return false; } diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 94ca07cf1b..fad90fab83 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -3129,6 +3129,7 @@ namespace OpenSim.Region.Environment.Scenes remoteClient.SendTeleportFailed("The region '" + regionName + "' could not be found."); return; } + RequestTeleportLocation(remoteClient, regionInfo.RegionHandle, position, lookat, teleportFlags); } @@ -3149,7 +3150,8 @@ namespace OpenSim.Region.Environment.Scenes if (m_scenePresences.ContainsKey(remoteClient.AgentId)) sp = m_scenePresences[remoteClient.AgentId]; } - if (sp!= null) + + if (sp != null) { m_sceneGridService.RequestTeleportToLocation(sp, regionHandle, position, lookAt, teleportFlags); diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs index ab4e7d8d9b..65e62efe9c 100644 --- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs @@ -701,6 +701,7 @@ namespace OpenSim.Region.Environment.Scenes position, avatar.Name, avatar.UUID, emergencyPos); position = emergencyPos; } + // TODO: Get proper AVG Height float localAVHeight = 1.56f; float posZLimit = (float)avatar.Scene.GetLandHeight((int)position.X, (int)position.Y); @@ -713,7 +714,6 @@ namespace OpenSim.Region.Environment.Scenes // Only send this if the event queue is null if (eq == null) avatar.ControllingClient.SendTeleportLocationStart(); - avatar.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); avatar.Teleport(position); diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 00e5548c98..d2d8335995 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -42,7 +42,6 @@ using OpenSim.Region.Interfaces; using OpenSim.Region.Physics.Manager; using OSD = OpenMetaverse.StructuredData.OSD; - namespace OpenSim.Region.Environment.Scenes { enum ScriptControlled : uint @@ -2757,7 +2756,6 @@ namespace OpenSim.Region.Environment.Scenes static ScenePresence() { - Primitive.TextureEntry textu = AvatarAppearance.GetDefaultTexture(); DefaultTexture = textu.ToBytes(); } diff --git a/OpenSim/Region/Environment/Scenes/Tests/EntityManagerTests.cs b/OpenSim/Region/Environment/Scenes/Tests/EntityManagerTests.cs index 5923a2cc95..cc9cc035c6 100644 --- a/OpenSim/Region/Environment/Scenes/Tests/EntityManagerTests.cs +++ b/OpenSim/Region/Environment/Scenes/Tests/EntityManagerTests.cs @@ -25,17 +25,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using NUnit.Framework.SyntaxHelpers; using System; using System.Threading; using System.Text; using System.Collections.Generic; using Nini.Config; using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; +using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Communications; using OpenSim.Region.Environment.Scenes; -using OpenMetaverse; namespace OpenSim.Region.Environment.Scenes.Tests { diff --git a/OpenSim/Region/Environment/Scenes/Tests/SceneTestUtils.cs b/OpenSim/Region/Environment/Scenes/Tests/SceneTestUtils.cs index a9a9ecda9d..3c4049dd1c 100644 --- a/OpenSim/Region/Environment/Scenes/Tests/SceneTestUtils.cs +++ b/OpenSim/Region/Environment/Scenes/Tests/SceneTestUtils.cs @@ -25,6 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System.Net; using Nini.Config; using OpenMetaverse; using OpenSim.Framework; @@ -32,6 +33,7 @@ using OpenSim.Framework.Communications; using OpenSim.Framework.Communications.Cache; using OpenSim.Framework.Servers; using OpenSim.Region.Physics.Manager; +using OpenSim.Region.Environment; using OpenSim.Region.Environment.Scenes; using OpenSim.Tests.Common.Mock; @@ -48,18 +50,31 @@ namespace OpenSim.Region.Environment.Scenes.Tests /// public static TestScene SetupScene() { - RegionInfo regInfo = new RegionInfo(1000, 1000, null, null); - regInfo.RegionName = "Unit test region"; - regInfo.ExternalHostName = "1.2.3.4"; + return SetupScene("Unit test region", UUID.Random(), 1000, 1000, new TestCommunicationsManager()); + } + + /// + /// Set up a test scene + /// + /// Name of the region + /// ID of the region + /// X co-ordinate of the region + /// Y co-ordinate of the region + /// This should be the same if simulating two scenes within a standalone + /// + public static TestScene SetupScene(string name, UUID id, uint x, uint y, CommunicationsManager cm) + { + RegionInfo regInfo = new RegionInfo(x, y, new IPEndPoint(IPAddress.Loopback, 9000), "127.0.0.1"); + regInfo.RegionName = name; + regInfo.RegionID = id; AgentCircuitManager acm = new AgentCircuitManager(); - CommunicationsManager cm = new TestCommunicationsManager(); SceneCommunicationService scs = new SceneCommunicationService(cm); SQLAssetServer assetService = new SQLAssetServer(new TestAssetDataPlugin()); AssetCache ac = new AssetCache(assetService); - StorageManager sm = new OpenSim.Region.Environment.StorageManager("OpenSim.Data.Null.dll", "", ""); + StorageManager sm = new StorageManager("OpenSim.Data.Null.dll", "", ""); IConfigSource configSource = new IniConfigSource(); TestScene testScene = new TestScene( @@ -70,7 +85,8 @@ namespace OpenSim.Region.Environment.Scenes.Tests PhysicsPluginManager physicsPluginManager = new PhysicsPluginManager(); physicsPluginManager.LoadPluginsFromAssembly("Physics/OpenSim.Region.Physics.BasicPhysicsPlugin.dll"); - testScene.PhysicsScene = physicsPluginManager.GetPhysicsScene("basicphysics", "ZeroMesher", configSource, "test"); + testScene.PhysicsScene + = physicsPluginManager.GetPhysicsScene("basicphysics", "ZeroMesher", configSource, "test"); return testScene; } @@ -81,7 +97,7 @@ namespace OpenSim.Region.Environment.Scenes.Tests /// /// /// - public static IClientAPI AddRootAgent(Scene scene, UUID agentId) + public static TestClient AddRootAgent(Scene scene, UUID agentId) { string firstName = "testfirstname"; @@ -102,7 +118,7 @@ namespace OpenSim.Region.Environment.Scenes.Tests scene.NewUserConnection(agent); // Stage 2: add the new client as a child agent to the scene - IClientAPI client = new TestClient(agent); + TestClient client = new TestClient(agent); scene.AddNewClient(client); // Stage 3: Invoke agent crossing, which converts the child agent into a root agent (with appearance, diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index 428f5996e5..5b3b27bffb 100644 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs @@ -365,6 +365,17 @@ namespace OpenSim.Tests.Common.Mock m_firstName = agentData.firstname; m_lastName = agentData.lastname; } + + /// + /// Attempt a teleport to the given region. + /// + /// + /// + /// + public void Teleport(ulong regionHandle, Vector3 position, Vector3 lookAt) + { + OnTeleportLocationRequest(this, regionHandle, position, lookAt, 16); + } public virtual void ActivateGesture(UUID assetId, UUID gestureId) { diff --git a/OpenSim/Tests/Common/Mock/TestCommunicationsManager.cs b/OpenSim/Tests/Common/Mock/TestCommunicationsManager.cs index 738bc1586a..1663ac1804 100644 --- a/OpenSim/Tests/Common/Mock/TestCommunicationsManager.cs +++ b/OpenSim/Tests/Common/Mock/TestCommunicationsManager.cs @@ -69,7 +69,8 @@ namespace OpenSim.Tests.Common.Mock m_userAdminService = lus; LocalBackEndServices gs = new LocalBackEndServices(); - m_gridService = gs; + m_gridService = gs; + m_interRegion = gs; } } }