Merge branch 'master' into careminster
Conflicts: OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs OpenSim/Region/Framework/Scenes/ScenePresence.csavinationmerge
commit
7da744566d
|
@ -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());
|
||||
|
|
|
@ -355,8 +355,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
|
||||
|
@ -428,16 +426,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
|
||||
{
|
||||
|
@ -462,6 +463,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
// DebugPacketLevel = 1;
|
||||
|
||||
CloseSyncLock = new Object();
|
||||
|
||||
RegisterInterface<IClientIM>(this);
|
||||
RegisterInterface<IClientInventory>(this);
|
||||
RegisterInterface<IClientChat>(this);
|
||||
|
@ -494,13 +497,15 @@ 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()
|
||||
{
|
||||
|
@ -513,7 +518,29 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
public void Close(bool sendStop)
|
||||
{
|
||||
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(sendStop);
|
||||
}
|
||||
}
|
||||
|
||||
/// <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(bool sendStop)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[CLIENT]: Close has been called for {0} attached to scene {1}",
|
||||
Name, m_scene.RegionInfo.RegionName);
|
||||
|
@ -3630,7 +3657,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;
|
||||
|
@ -5263,7 +5292,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);
|
||||
|
|
|
@ -1181,22 +1181,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");
|
||||
|
||||
Util.FireAndForget(o => 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(true);
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -551,11 +551,5 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
|||
|
||||
SendAnimPack(animIDs, sequenceNums, objectIDs);
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
m_animations = null;
|
||||
m_scenePresence = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3688,8 +3688,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();
|
||||
|
@ -4679,6 +4679,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.
|
||||
|
|
|
@ -848,7 +848,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;
|
||||
}
|
||||
|
|
|
@ -110,15 +110,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.
|
||||
|
@ -2761,8 +2756,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>
|
||||
|
@ -3438,6 +3432,16 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (IsChildAgent)
|
||||
return;
|
||||
|
||||
//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 (m_updateCount > 0)
|
||||
// {
|
||||
Animator.UpdateMovementAnimations();
|
||||
// m_updateCount--;
|
||||
// }
|
||||
|
||||
CollisionEventUpdate collisionData = (CollisionEventUpdate)e;
|
||||
Dictionary<uint, ContactPoint> coldata = collisionData.m_objCollisionList;
|
||||
|
||||
|
@ -3451,7 +3455,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// m_lastColCount = coldata.Count;
|
||||
// }
|
||||
|
||||
if (coldata.Count != 0 && Animator != null)
|
||||
if (coldata.Count != 0)
|
||||
{
|
||||
switch (Animator.CurrentMovementAnimation)
|
||||
{
|
||||
|
@ -3563,7 +3567,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
ControllingClient.SendHealth(Health);
|
||||
}
|
||||
|
||||
public void Close()
|
||||
protected internal void Close()
|
||||
{
|
||||
// Clear known regions
|
||||
KnownRegions = new Dictionary<ulong, string>();
|
||||
|
@ -3579,9 +3583,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// m_reprioritizationTimer.Dispose();
|
||||
|
||||
RemoveFromPhysicalScene();
|
||||
if(Animator != null)
|
||||
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