Merge branch 'master' of /home/opensim/var/repo/opensim
						commit
						0b185aaf18
					
				|  | @ -1145,8 +1145,8 @@ namespace OpenSim | |||
|                     c => cdt.AddRow( | ||||
|                         s.Name, | ||||
|                         c.Name, | ||||
|                         c.RemoteEndPoint.ToString(), | ||||
|                         c.CircuitCode.ToString(), | ||||
|                         c.RemoteEndPoint.ToString(),                 | ||||
|                         c.IsActive.ToString()))); | ||||
| 
 | ||||
|             MainConsole.Instance.Output(cdt.ToString()); | ||||
|  |  | |||
|  | @ -347,8 +347,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|         private int m_animationSequenceNumber = 1; | ||||
|         private bool m_SendLogoutPacketWhenClosing = true; | ||||
|         private AgentUpdateArgs lastarg; | ||||
|         private bool m_IsActive = true; | ||||
|         private bool m_IsLoggingOut = false; | ||||
| 
 | ||||
|         protected Dictionary<PacketType, PacketProcessor> m_packetHandlers = new Dictionary<PacketType, PacketProcessor>(); | ||||
|         protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers | ||||
|  | @ -412,16 +410,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|         public uint CircuitCode { get { return m_circuitCode; } } | ||||
|         public int MoneyBalance { get { return m_moneyBalance; } } | ||||
|         public int NextAnimationSequenceNumber { get { return m_animationSequenceNumber++; } } | ||||
|         public bool IsActive | ||||
|         { | ||||
|             get { return m_IsActive; } | ||||
|             set { m_IsActive = value; } | ||||
|         } | ||||
|         public bool IsLoggingOut | ||||
|         { | ||||
|             get { return m_IsLoggingOut; } | ||||
|             set { m_IsLoggingOut = value; } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// As well as it's function in IClientAPI, in LLClientView we are locking on this property in order to | ||||
|         /// prevent race conditions by different threads calling Close(). | ||||
|         /// </summary> | ||||
|         public bool IsActive { get; set; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Used to synchronise threads when client is being closed. | ||||
|         /// </summary> | ||||
|         public Object CloseSyncLock { get; private set; } | ||||
| 
 | ||||
|         public bool IsLoggingOut { get; set; } | ||||
| 
 | ||||
|         public bool DisableFacelights | ||||
|         { | ||||
|  | @ -446,6 +447,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|         { | ||||
| //            DebugPacketLevel = 1; | ||||
| 
 | ||||
|             CloseSyncLock = new Object(); | ||||
| 
 | ||||
|             RegisterInterface<IClientIM>(this); | ||||
|             RegisterInterface<IClientInventory>(this); | ||||
|             RegisterInterface<IClientChat>(this); | ||||
|  | @ -478,17 +481,40 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|             m_prioritizer = new Prioritizer(m_scene); | ||||
| 
 | ||||
|             RegisterLocalPacketHandlers(); | ||||
| 
 | ||||
|             IsActive = true; | ||||
|         } | ||||
| 
 | ||||
|         #region Client Methods | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Shut down the client view | ||||
|         /// Close down the client view | ||||
|         /// </summary> | ||||
|         public void Close() | ||||
|         { | ||||
|             IsActive = false; | ||||
|             // We lock here to prevent race conditions between two threads calling close simultaneously (e.g. | ||||
|             // a simultaneous relog just as a client is being closed out due to no packet ack from the old connection. | ||||
|             lock (CloseSyncLock) | ||||
|             { | ||||
|                 if (!IsActive) | ||||
|                     return; | ||||
| 
 | ||||
|                 IsActive = false; | ||||
|                 CloseWithoutChecks(); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Closes down the client view without first checking whether it is active. | ||||
|         /// </summary> | ||||
|         /// <remarks> | ||||
|         /// This exists because LLUDPServer has to set IsActive = false in earlier synchronous code before calling | ||||
|         /// CloseWithoutIsActiveCheck asynchronously. | ||||
|         /// | ||||
|         /// Callers must lock ClosingSyncLock before calling. | ||||
|         /// </remarks> | ||||
|         public void CloseWithoutChecks() | ||||
|         { | ||||
|             m_log.DebugFormat( | ||||
|                 "[CLIENT]: Close has been called for {0} attached to scene {1}", | ||||
|                 Name, m_scene.RegionInfo.RegionName); | ||||
|  | @ -3567,7 +3593,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
| 
 | ||||
|         public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations) | ||||
|         { | ||||
|             if (!IsActive) return; // We don't need to update inactive clients. | ||||
|             // We don't need to update inactive clients. | ||||
|             if (!IsActive) | ||||
|                 return; | ||||
| 
 | ||||
|             CoarseLocationUpdatePacket loc = (CoarseLocationUpdatePacket)PacketPool.Instance.GetPacket(PacketType.CoarseLocationUpdate); | ||||
|             loc.Header.Reliable = false; | ||||
|  | @ -5164,7 +5192,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|             AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer); | ||||
|             AddLocalPacketHandler(PacketType.AvatarPropertiesUpdate, HandlerAvatarPropertiesUpdate); | ||||
|             AddLocalPacketHandler(PacketType.ScriptDialogReply, HandlerScriptDialogReply); | ||||
|             AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage, false); | ||||
|             AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage); | ||||
|             AddLocalPacketHandler(PacketType.AcceptFriendship, HandlerAcceptFriendship); | ||||
|             AddLocalPacketHandler(PacketType.DeclineFriendship, HandlerDeclineFriendship); | ||||
|             AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFriendship); | ||||
|  |  | |||
|  | @ -1123,22 +1123,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|         /// regular client pings. | ||||
|         /// </remarks> | ||||
|         /// <param name='client'></param> | ||||
|         private void DeactivateClientDueToTimeout(IClientAPI client) | ||||
|         private void DeactivateClientDueToTimeout(LLClientView client) | ||||
|         { | ||||
|             // We must set IsActive synchronously so that we can stop the packet loop reinvoking this method, even | ||||
|             // though it's set later on by LLClientView.Close() | ||||
|             client.IsActive = false; | ||||
| 
 | ||||
|             m_log.WarnFormat( | ||||
|                 "[LLUDPSERVER]: Ack timeout, disconnecting {0} agent for {1} in {2}", | ||||
|                 client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, m_scene.RegionInfo.RegionName); | ||||
| 
 | ||||
|             StatsManager.SimExtraStats.AddAbnormalClientThreadTermination(); | ||||
| 
 | ||||
|             if (!client.SceneAgent.IsChildAgent) | ||||
|                  client.Kick("Simulator logged you out due to connection timeout"); | ||||
| 
 | ||||
|             client.Close(); | ||||
|             lock (client.CloseSyncLock) | ||||
|             { | ||||
|                 m_log.WarnFormat( | ||||
|                     "[LLUDPSERVER]: Ack timeout, disconnecting {0} agent for {1} in {2}", | ||||
|                     client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, m_scene.RegionInfo.RegionName); | ||||
|      | ||||
|                 StatsManager.SimExtraStats.AddAbnormalClientThreadTermination(); | ||||
|      | ||||
|                 if (!client.SceneAgent.IsChildAgent) | ||||
|                      client.Kick("Simulator logged you out due to connection timeout"); | ||||
|      | ||||
|                 client.CloseWithoutChecks(); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private void IncomingPacketHandler() | ||||
|  |  | |||
|  | @ -96,7 +96,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups | |||
| 
 | ||||
|             scene.EventManager.OnNewClient += OnNewClient; | ||||
|             scene.EventManager.OnClientClosed += OnClientClosed; | ||||
|             scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; | ||||
| //            scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; | ||||
|         } | ||||
| 
 | ||||
|         public void PostInitialise() | ||||
|  | @ -133,7 +133,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups | |||
|         private void OnNewClient(IClientAPI client) | ||||
|         { | ||||
|             // Subscribe to instant messages | ||||
|             client.OnInstantMessage += OnInstantMessage; | ||||
| //            client.OnInstantMessage += OnInstantMessage; | ||||
|             client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest; | ||||
|             client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest; | ||||
|             lock (m_ClientMap) | ||||
|  | @ -171,15 +171,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups | |||
|                                              ActiveGroupTitle); | ||||
|         } | ||||
| 
 | ||||
|         private void OnInstantMessage(IClientAPI client, GridInstantMessage im) | ||||
|         { | ||||
|         } | ||||
| //        private void OnInstantMessage(IClientAPI client, GridInstantMessage im) | ||||
| //        { | ||||
| //        } | ||||
| 
 | ||||
|         private void OnGridInstantMessage(GridInstantMessage msg) | ||||
|         { | ||||
|             // Trigger the above event handler | ||||
|             OnInstantMessage(null, msg); | ||||
|         } | ||||
| //        private void OnGridInstantMessage(GridInstantMessage msg) | ||||
| //        { | ||||
| //            // Trigger the above event handler | ||||
| //            OnInstantMessage(null, msg); | ||||
| //        } | ||||
| 
 | ||||
|         private void HandleUUIDGroupNameRequest(UUID id,IClientAPI remote_client) | ||||
|         { | ||||
|  |  | |||
|  | @ -535,11 +535,5 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
| 
 | ||||
|             SendAnimPack(animIDs, sequenceNums, objectIDs); | ||||
|         } | ||||
| 
 | ||||
|         public void Close() | ||||
|         { | ||||
|             m_animations = null; | ||||
|             m_scenePresence = null; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
|  | @ -3517,8 +3517,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                 // We have a zombie from a crashed session.  | ||||
|                 // Or the same user is trying to be root twice here, won't work. | ||||
|                 // Kill it. | ||||
|                 m_log.DebugFormat( | ||||
|                     "[SCENE]: Zombie scene presence detected for {0} {1} in {2}", | ||||
|                 m_log.WarnFormat( | ||||
|                     "[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting.  Removing existing presence.", | ||||
|                     sp.Name, sp.UUID, RegionInfo.RegionName); | ||||
| 
 | ||||
|                 sp.ControllingClient.Close(); | ||||
|  | @ -4469,6 +4469,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             return m_sceneGraph.GetScenePresence(localID); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Gets all the scene presences in this scene. | ||||
|         /// </summary> | ||||
|         /// <remarks> | ||||
|         /// This method will return both root and child scene presences. | ||||
|         /// | ||||
|         /// Consider using ForEachScenePresence() or ForEachRootScenePresence() if possible since these will not | ||||
|         /// involving creating a new List object. | ||||
|         /// </remarks> | ||||
|         /// <returns> | ||||
|         /// A list of the scene presences.  Adding or removing from the list will not affect the presences in the scene. | ||||
|         /// </returns> | ||||
|         public List<ScenePresence> GetScenePresences() | ||||
|         { | ||||
|             return new List<ScenePresence>(m_sceneGraph.GetScenePresences()); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Performs action on all avatars in the scene (root scene presences) | ||||
|         /// Avatars may be an NPC or a 'real' client. | ||||
|  |  | |||
|  | @ -768,7 +768,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         /// pass a delegate to ForEachScenePresence. | ||||
|         /// </summary> | ||||
|         /// <returns></returns> | ||||
|         private List<ScenePresence> GetScenePresences() | ||||
|         protected internal List<ScenePresence> GetScenePresences() | ||||
|         { | ||||
|             return m_scenePresenceArray; | ||||
|         } | ||||
|  |  | |||
|  | @ -109,15 +109,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|         public UUID currentParcelUUID = UUID.Zero; | ||||
| 
 | ||||
|         protected ScenePresenceAnimator m_animator; | ||||
|         /// <value> | ||||
|         /// The animator for this avatar | ||||
|         /// </value> | ||||
|         public ScenePresenceAnimator Animator | ||||
|         { | ||||
|             get { return m_animator; } | ||||
|             private set { m_animator = value; } | ||||
|         } | ||||
|         public ScenePresenceAnimator Animator { get; private set; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Attachments recorded on this avatar. | ||||
|  | @ -2569,8 +2564,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID); | ||||
| 
 | ||||
|             avatar.ControllingClient.SendAvatarDataImmediate(this); | ||||
|             if (Animator != null) | ||||
|                 Animator.SendAnimPackToClient(avatar.ControllingClient); | ||||
|             Animator.SendAnimPackToClient(avatar.ControllingClient); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|  | @ -3239,14 +3233,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             //if ((Math.Abs(Velocity.X) > 0.1e-9f) || (Math.Abs(Velocity.Y) > 0.1e-9f)) | ||||
|             // The Physics Scene will send updates every 500 ms grep: PhysicsActor.SubscribeEvents( | ||||
|             // as of this comment the interval is set in AddToPhysicalScene | ||||
|             if (Animator != null) | ||||
|             { | ||||
| 
 | ||||
| //                if (m_updateCount > 0) | ||||
| //                { | ||||
|                     Animator.UpdateMovementAnimations(); | ||||
|             Animator.UpdateMovementAnimations(); | ||||
| //                    m_updateCount--; | ||||
| //                } | ||||
|             } | ||||
| 
 | ||||
|             CollisionEventUpdate collisionData = (CollisionEventUpdate)e; | ||||
|             Dictionary<uint, ContactPoint> coldata = collisionData.m_objCollisionList; | ||||
|  | @ -3261,7 +3253,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
| //                m_lastColCount = coldata.Count; | ||||
| //            } | ||||
| 
 | ||||
|             if (coldata.Count != 0 && Animator != null) | ||||
|             if (coldata.Count != 0) | ||||
|             { | ||||
|                 switch (Animator.CurrentMovementAnimation) | ||||
|                 { | ||||
|  | @ -3371,7 +3363,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             ControllingClient.SendHealth(Health); | ||||
|         } | ||||
| 
 | ||||
|         public void Close() | ||||
|         protected internal void Close() | ||||
|         { | ||||
|             // Clear known regions | ||||
|             KnownRegions = new Dictionary<ulong, string>(); | ||||
|  | @ -3387,8 +3379,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             // m_reprioritizationTimer.Dispose();  | ||||
| 
 | ||||
|             RemoveFromPhysicalScene(); | ||||
|             Animator.Close(); | ||||
|             Animator = null; | ||||
|         } | ||||
| 
 | ||||
|         public void AddAttachment(SceneObjectGroup gobj) | ||||
|  |  | |||
|  | @ -53,48 +53,83 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
|     /// Scene presence tests | ||||
|     /// </summary> | ||||
|     [TestFixture] | ||||
|     public class ScenePresenceAgentTests | ||||
|     public class ScenePresenceAgentTests : OpenSimTestCase | ||||
|     { | ||||
|         public Scene scene, scene2, scene3; | ||||
|         public UUID agent1, agent2, agent3; | ||||
|         public static Random random; | ||||
|         public ulong region1,region2,region3; | ||||
|         public AgentCircuitData acd1; | ||||
|         public SceneObjectGroup sog1, sog2, sog3; | ||||
|         public TestClient testclient; | ||||
| //        public Scene scene, scene2, scene3; | ||||
| //        public UUID agent1, agent2, agent3; | ||||
| //        public static Random random; | ||||
| //        public ulong region1, region2, region3; | ||||
| //        public AgentCircuitData acd1; | ||||
| //        public TestClient testclient; | ||||
| 
 | ||||
|         [TestFixtureSetUp] | ||||
|         public void Init() | ||||
| //        [TestFixtureSetUp] | ||||
| //        public void Init() | ||||
| //        { | ||||
| ////            TestHelpers.InMethod(); | ||||
| //// | ||||
| ////            SceneHelpers sh = new SceneHelpers(); | ||||
| //// | ||||
| ////            scene = sh.SetupScene("Neighbour x", UUID.Random(), 1000, 1000); | ||||
| ////            scene2 = sh.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000); | ||||
| ////            scene3 = sh.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000); | ||||
| //// | ||||
| ////            ISharedRegionModule interregionComms = new LocalSimulationConnectorModule(); | ||||
| ////            interregionComms.Initialise(new IniConfigSource()); | ||||
| ////            interregionComms.PostInitialise(); | ||||
| ////            SceneHelpers.SetupSceneModules(scene, new IniConfigSource(), interregionComms); | ||||
| ////            SceneHelpers.SetupSceneModules(scene2, new IniConfigSource(), interregionComms); | ||||
| ////            SceneHelpers.SetupSceneModules(scene3, new IniConfigSource(), interregionComms); | ||||
| // | ||||
| ////            agent1 = UUID.Random(); | ||||
| ////            agent2 = UUID.Random(); | ||||
| ////            agent3 = UUID.Random(); | ||||
| // | ||||
| ////            region1 = scene.RegionInfo.RegionHandle; | ||||
| ////            region2 = scene2.RegionInfo.RegionHandle; | ||||
| ////            region3 = scene3.RegionInfo.RegionHandle; | ||||
| //        } | ||||
| 
 | ||||
|         [Test] | ||||
|         public void TestCreateRootScenePresence() | ||||
|         { | ||||
|             TestHelpers.InMethod(); | ||||
| //            TestHelpers.EnableLogging(); | ||||
| 
 | ||||
|             SceneHelpers sh = new SceneHelpers(); | ||||
|             UUID spUuid = TestHelpers.ParseTail(0x1); | ||||
| 
 | ||||
|             scene = sh.SetupScene("Neighbour x", UUID.Random(), 1000, 1000); | ||||
|             scene2 = sh.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000); | ||||
|             scene3 = sh.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000); | ||||
|             TestScene scene = new SceneHelpers().SetupScene(); | ||||
|             SceneHelpers.AddScenePresence(scene, spUuid); | ||||
| 
 | ||||
|             ISharedRegionModule interregionComms = new LocalSimulationConnectorModule(); | ||||
|             interregionComms.Initialise(new IniConfigSource()); | ||||
|             interregionComms.PostInitialise(); | ||||
|             SceneHelpers.SetupSceneModules(scene, new IniConfigSource(), interregionComms); | ||||
|             SceneHelpers.SetupSceneModules(scene2, new IniConfigSource(), interregionComms); | ||||
|             SceneHelpers.SetupSceneModules(scene3, new IniConfigSource(), interregionComms); | ||||
|             Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(spUuid), Is.Not.Null); | ||||
|             Assert.That(scene.AuthenticateHandler.GetAgentCircuits().Count, Is.EqualTo(1)); | ||||
| 
 | ||||
|             agent1 = UUID.Random(); | ||||
|             agent2 = UUID.Random(); | ||||
|             agent3 = UUID.Random(); | ||||
|             random = new Random(); | ||||
|             sog1 = SceneHelpers.CreateSceneObject(1, agent1); | ||||
|             scene.AddSceneObject(sog1); | ||||
|             sog2 = SceneHelpers.CreateSceneObject(1, agent1); | ||||
|             scene.AddSceneObject(sog2); | ||||
|             sog3 = SceneHelpers.CreateSceneObject(1, agent1); | ||||
|             scene.AddSceneObject(sog3); | ||||
|             ScenePresence sp = scene.GetScenePresence(spUuid); | ||||
|             Assert.That(sp, Is.Not.Null); | ||||
|             Assert.That(sp.IsChildAgent, Is.False); | ||||
|             Assert.That(sp.UUID, Is.EqualTo(spUuid)); | ||||
| 
 | ||||
|             region1 = scene.RegionInfo.RegionHandle; | ||||
|             region2 = scene2.RegionInfo.RegionHandle; | ||||
|             region3 = scene3.RegionInfo.RegionHandle; | ||||
|             Assert.That(scene.GetScenePresences().Count, Is.EqualTo(1)); | ||||
|         } | ||||
| 
 | ||||
|         [Test] | ||||
|         public void TestCreateDuplicateRootScenePresence() | ||||
|         { | ||||
|             TestHelpers.InMethod(); | ||||
| //            TestHelpers.EnableLogging(); | ||||
| 
 | ||||
|             UUID spUuid = TestHelpers.ParseTail(0x1); | ||||
| 
 | ||||
|             TestScene scene = new SceneHelpers().SetupScene(); | ||||
|             SceneHelpers.AddScenePresence(scene, spUuid); | ||||
|             SceneHelpers.AddScenePresence(scene, spUuid); | ||||
| 
 | ||||
|             Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(spUuid), Is.Not.Null); | ||||
|             Assert.That(scene.AuthenticateHandler.GetAgentCircuits().Count, Is.EqualTo(1)); | ||||
| 
 | ||||
|             ScenePresence sp = scene.GetScenePresence(spUuid); | ||||
|             Assert.That(sp, Is.Not.Null); | ||||
|             Assert.That(sp.IsChildAgent, Is.False); | ||||
|             Assert.That(sp.UUID, Is.EqualTo(spUuid)); | ||||
|         } | ||||
| 
 | ||||
|         [Test] | ||||
|  | @ -106,9 +141,6 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
|             TestScene scene = new SceneHelpers().SetupScene(); | ||||
|             ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); | ||||
| 
 | ||||
|             Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(sp.UUID), Is.Not.Null); | ||||
|             Assert.That(scene.AuthenticateHandler.GetAgentCircuits().Count, Is.EqualTo(1)); | ||||
| 
 | ||||
|             scene.IncomingCloseAgent(sp.UUID); | ||||
| 
 | ||||
|             Assert.That(scene.GetScenePresence(sp.UUID), Is.Null); | ||||
|  | @ -266,99 +298,99 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
|         // but things are synchronous among them. So there should be | ||||
|         // 3 threads in here. | ||||
|         //[Test] | ||||
|         public void T021_TestCrossToNewRegion() | ||||
|         { | ||||
|             TestHelpers.InMethod(); | ||||
| 
 | ||||
|             scene.RegisterRegionWithGrid(); | ||||
|             scene2.RegisterRegionWithGrid(); | ||||
| 
 | ||||
|             // Adding child agent to region 1001 | ||||
|             string reason; | ||||
|             scene2.NewUserConnection(acd1,0, out reason); | ||||
|             scene2.AddNewClient(testclient, PresenceType.User); | ||||
| 
 | ||||
|             ScenePresence presence = scene.GetScenePresence(agent1); | ||||
|             presence.MakeRootAgent(new Vector3(0,unchecked(Constants.RegionSize-1),0), true); | ||||
| 
 | ||||
|             ScenePresence presence2 = scene2.GetScenePresence(agent1); | ||||
| 
 | ||||
|            // Adding neighbour region caps info to presence2 | ||||
| 
 | ||||
|             string cap = presence.ControllingClient.RequestClientInfo().CapsPath; | ||||
|             presence2.AddNeighbourRegion(region1, cap); | ||||
| 
 | ||||
|             Assert.That(presence.IsChildAgent, Is.False, "Did not start root in origin region."); | ||||
|             Assert.That(presence2.IsChildAgent, Is.True, "Is not a child on destination region."); | ||||
| 
 | ||||
|             // Cross to x+1 | ||||
|             presence.AbsolutePosition = new Vector3(Constants.RegionSize+1,3,100); | ||||
|             presence.Update(); | ||||
| 
 | ||||
|             EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing"); | ||||
| 
 | ||||
|             // Mimicking communication between client and server, by waiting OK from client | ||||
|             // sent by TestClient.CrossRegion call. Originally, this is network comm. | ||||
|             if (!wh.WaitOne(5000,false)) | ||||
|             { | ||||
|                 presence.Update(); | ||||
|                 if (!wh.WaitOne(8000,false)) | ||||
|                     throw new ArgumentException("1 - Timeout waiting for signal/variable."); | ||||
|             } | ||||
| 
 | ||||
|             // This is a TestClient specific method that fires OnCompleteMovementToRegion event, which | ||||
|             // would normally be fired after receiving the reply packet from comm. done on the last line. | ||||
|             testclient.CompleteMovement(); | ||||
| 
 | ||||
|             // Crossings are asynchronous | ||||
|             int timer = 10; | ||||
| 
 | ||||
|             // Make sure cross hasn't already finished | ||||
|             if (!presence.IsInTransit && !presence.IsChildAgent) | ||||
|             { | ||||
|                 // If not and not in transit yet, give it some more time | ||||
|                 Thread.Sleep(5000); | ||||
|             } | ||||
| 
 | ||||
|             // Enough time, should at least be in transit by now. | ||||
|             while (presence.IsInTransit && timer > 0) | ||||
|             { | ||||
|                 Thread.Sleep(1000); | ||||
|                 timer-=1; | ||||
|             } | ||||
| 
 | ||||
|             Assert.That(timer,Is.GreaterThan(0),"Timed out waiting to cross 2->1."); | ||||
|             Assert.That(presence.IsChildAgent, Is.True, "Did not complete region cross as expected."); | ||||
|             Assert.That(presence2.IsChildAgent, Is.False, "Did not receive root status after receiving agent."); | ||||
| 
 | ||||
|             // Cross Back | ||||
|             presence2.AbsolutePosition = new Vector3(-10, 3, 100); | ||||
|             presence2.Update(); | ||||
| 
 | ||||
|             if (!wh.WaitOne(5000,false)) | ||||
|             { | ||||
|                 presence2.Update(); | ||||
|                 if (!wh.WaitOne(8000,false)) | ||||
|                     throw new ArgumentException("2 - Timeout waiting for signal/variable."); | ||||
|             } | ||||
|             testclient.CompleteMovement(); | ||||
| 
 | ||||
|             if (!presence2.IsInTransit && !presence2.IsChildAgent) | ||||
|             { | ||||
|                 // If not and not in transit yet, give it some more time | ||||
|                 Thread.Sleep(5000); | ||||
|             } | ||||
| 
 | ||||
|             // Enough time, should at least be in transit by now. | ||||
|             while (presence2.IsInTransit && timer > 0) | ||||
|             { | ||||
|                 Thread.Sleep(1000); | ||||
|                 timer-=1; | ||||
|             } | ||||
| 
 | ||||
|             Assert.That(timer,Is.GreaterThan(0),"Timed out waiting to cross 1->2."); | ||||
|             Assert.That(presence2.IsChildAgent, Is.True, "Did not return from region as expected."); | ||||
|             Assert.That(presence.IsChildAgent, Is.False, "Presence was not made root in old region again."); | ||||
|         } | ||||
| //        public void T021_TestCrossToNewRegion() | ||||
| //        { | ||||
| //            TestHelpers.InMethod(); | ||||
| // | ||||
| //            scene.RegisterRegionWithGrid(); | ||||
| //            scene2.RegisterRegionWithGrid(); | ||||
| // | ||||
| //            // Adding child agent to region 1001 | ||||
| //            string reason; | ||||
| //            scene2.NewUserConnection(acd1,0, out reason); | ||||
| //            scene2.AddNewClient(testclient, PresenceType.User); | ||||
| // | ||||
| //            ScenePresence presence = scene.GetScenePresence(agent1); | ||||
| //            presence.MakeRootAgent(new Vector3(0,unchecked(Constants.RegionSize-1),0), true); | ||||
| // | ||||
| //            ScenePresence presence2 = scene2.GetScenePresence(agent1); | ||||
| // | ||||
| //           // Adding neighbour region caps info to presence2 | ||||
| // | ||||
| //            string cap = presence.ControllingClient.RequestClientInfo().CapsPath; | ||||
| //            presence2.AddNeighbourRegion(region1, cap); | ||||
| // | ||||
| //            Assert.That(presence.IsChildAgent, Is.False, "Did not start root in origin region."); | ||||
| //            Assert.That(presence2.IsChildAgent, Is.True, "Is not a child on destination region."); | ||||
| // | ||||
| //            // Cross to x+1 | ||||
| //            presence.AbsolutePosition = new Vector3(Constants.RegionSize+1,3,100); | ||||
| //            presence.Update(); | ||||
| // | ||||
| //            EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing"); | ||||
| // | ||||
| //            // Mimicking communication between client and server, by waiting OK from client | ||||
| //            // sent by TestClient.CrossRegion call. Originally, this is network comm. | ||||
| //            if (!wh.WaitOne(5000,false)) | ||||
| //            { | ||||
| //                presence.Update(); | ||||
| //                if (!wh.WaitOne(8000,false)) | ||||
| //                    throw new ArgumentException("1 - Timeout waiting for signal/variable."); | ||||
| //            } | ||||
| // | ||||
| //            // This is a TestClient specific method that fires OnCompleteMovementToRegion event, which | ||||
| //            // would normally be fired after receiving the reply packet from comm. done on the last line. | ||||
| //            testclient.CompleteMovement(); | ||||
| // | ||||
| //            // Crossings are asynchronous | ||||
| //            int timer = 10; | ||||
| // | ||||
| //            // Make sure cross hasn't already finished | ||||
| //            if (!presence.IsInTransit && !presence.IsChildAgent) | ||||
| //            { | ||||
| //                // If not and not in transit yet, give it some more time | ||||
| //                Thread.Sleep(5000); | ||||
| //            } | ||||
| // | ||||
| //            // Enough time, should at least be in transit by now. | ||||
| //            while (presence.IsInTransit && timer > 0) | ||||
| //            { | ||||
| //                Thread.Sleep(1000); | ||||
| //                timer-=1; | ||||
| //            } | ||||
| // | ||||
| //            Assert.That(timer,Is.GreaterThan(0),"Timed out waiting to cross 2->1."); | ||||
| //            Assert.That(presence.IsChildAgent, Is.True, "Did not complete region cross as expected."); | ||||
| //            Assert.That(presence2.IsChildAgent, Is.False, "Did not receive root status after receiving agent."); | ||||
| // | ||||
| //            // Cross Back | ||||
| //            presence2.AbsolutePosition = new Vector3(-10, 3, 100); | ||||
| //            presence2.Update(); | ||||
| // | ||||
| //            if (!wh.WaitOne(5000,false)) | ||||
| //            { | ||||
| //                presence2.Update(); | ||||
| //                if (!wh.WaitOne(8000,false)) | ||||
| //                    throw new ArgumentException("2 - Timeout waiting for signal/variable."); | ||||
| //            } | ||||
| //            testclient.CompleteMovement(); | ||||
| // | ||||
| //            if (!presence2.IsInTransit && !presence2.IsChildAgent) | ||||
| //            { | ||||
| //                // If not and not in transit yet, give it some more time | ||||
| //                Thread.Sleep(5000); | ||||
| //            } | ||||
| // | ||||
| //            // Enough time, should at least be in transit by now. | ||||
| //            while (presence2.IsInTransit && timer > 0) | ||||
| //            { | ||||
| //                Thread.Sleep(1000); | ||||
| //                timer-=1; | ||||
| //            } | ||||
| // | ||||
| //            Assert.That(timer,Is.GreaterThan(0),"Timed out waiting to cross 1->2."); | ||||
| //            Assert.That(presence2.IsChildAgent, Is.True, "Did not return from region as expected."); | ||||
| //            Assert.That(presence.IsChildAgent, Is.False, "Presence was not made root in old region again."); | ||||
| //        } | ||||
|     } | ||||
| } | ||||
|  | @ -47,7 +47,7 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters | |||
|     [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "PhysicsParameters")] | ||||
|     public class PhysicsParameters : ISharedRegionModule | ||||
|     { | ||||
|         private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||||
| //        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||||
| //        private static string LogHeader = "[PHYSICS PARAMETERS]"; | ||||
| 
 | ||||
|         private List<Scene> m_scenes = new List<Scene>(); | ||||
|  |  | |||
|  | @ -48,7 +48,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady | |||
|             LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||||
| 
 | ||||
|         private IConfig m_config = null; | ||||
|         private bool m_ScriptRez; | ||||
|         private bool m_firstEmptyCompileQueue; | ||||
|         private bool m_oarFileLoading; | ||||
|         private bool m_lastOarLoadedOk; | ||||
|  | @ -91,7 +90,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady | |||
| 
 | ||||
|             m_scene.RegisterModuleInterface<IRegionReadyModule>(this); | ||||
| 
 | ||||
|             m_ScriptRez = false; | ||||
|             m_firstEmptyCompileQueue = true; | ||||
|             m_oarFileLoading = false; | ||||
|             m_lastOarLoadedOk = true; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 BlueWall
						BlueWall