minor: add some method doc to ScenePresence fields used for entity transfer, add minor details to some log messages, rename a misleading local variable name.
No functional changes.TeleportWork
parent
a33a1ac958
commit
b10710d4a5
|
@ -287,6 +287,12 @@ namespace OpenSim.Framework
|
|||
public Vector3 AtAxis;
|
||||
public Vector3 LeftAxis;
|
||||
public Vector3 UpAxis;
|
||||
|
||||
/// <summary>
|
||||
/// Signal on a V2 teleport that Scene.IncomingChildAgentDataUpdate(AgentData ad) should wait for the
|
||||
/// scene presence to become root (triggered when the viewer sends a CompleteAgentMovement UDP packet after
|
||||
/// establishing the connection triggered by it's receipt of a TeleportFinish EQ message).
|
||||
/// </summary>
|
||||
public bool SenderWantsToWaitForRoot;
|
||||
|
||||
public float Far;
|
||||
|
|
|
@ -689,7 +689,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, oldRegionX, newRegionX, oldRegionY, newRegionY, version, out reason);
|
||||
else
|
||||
TransferAgent_V1(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, oldRegionX, newRegionX, oldRegionY, newRegionY, version, out reason);
|
||||
|
||||
}
|
||||
|
||||
private void TransferAgent_V1(ScenePresence sp, AgentCircuitData agentCircuit, GridRegion reg, GridRegion finalDestination,
|
||||
|
@ -698,7 +697,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
ulong destinationHandle = finalDestination.RegionHandle;
|
||||
AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode);
|
||||
|
||||
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Using TP V1");
|
||||
m_log.DebugFormat(
|
||||
"[ENTITY TRANSFER MODULE]: Using TP V1 for {0} going from {1} to {2}",
|
||||
sp.Name, Scene.Name, finalDestination.RegionName);
|
||||
|
||||
// Let's create an agent there if one doesn't exist yet.
|
||||
// NOTE: logout will always be false for a non-HG teleport.
|
||||
bool logout = false;
|
||||
|
@ -1079,20 +1081,22 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
if (!sp.DoNotCloseAfterTeleport)
|
||||
{
|
||||
// OK, it got this agent. Let's close everything
|
||||
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Closing in agent {0} in region {1}", sp.Name, Scene.RegionInfo.RegionName);
|
||||
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Closing in agent {0} in region {1}", sp.Name, Scene.Name);
|
||||
sp.CloseChildAgents(newRegionX, newRegionY);
|
||||
sp.Scene.IncomingCloseAgent(sp.UUID, false);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Not closing agent {0}, user is back in {0}", sp.Name, Scene.RegionInfo.RegionName);
|
||||
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Not closing agent {0}, user is back in {0}", sp.Name, Scene.Name);
|
||||
sp.DoNotCloseAfterTeleport = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// now we have a child agent in this region.
|
||||
sp.Reset();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -4222,36 +4222,42 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
// We have to wait until the viewer contacts this region
|
||||
// after receiving the EnableSimulator HTTP Event Queue message. This triggers the viewer to send
|
||||
// after receiving the EnableSimulator HTTP Event Queue message (for the v1 teleport protocol)
|
||||
// or TeleportFinish (for the v2 teleport protocol). This triggers the viewer to send
|
||||
// a UseCircuitCode packet which in turn calls AddNewClient which finally creates the ScenePresence.
|
||||
ScenePresence childAgentUpdate = WaitGetScenePresence(cAgentData.AgentID);
|
||||
ScenePresence sp = WaitGetScenePresence(cAgentData.AgentID);
|
||||
|
||||
if (childAgentUpdate != null)
|
||||
if (sp != null)
|
||||
{
|
||||
if (cAgentData.SessionID != childAgentUpdate.ControllingClient.SessionId)
|
||||
if (cAgentData.SessionID != sp.ControllingClient.SessionId)
|
||||
{
|
||||
m_log.WarnFormat("[SCENE]: Attempt to update agent {0} with invalid session id {1} (possibly from simulator in older version; tell them to update).", childAgentUpdate.UUID, cAgentData.SessionID);
|
||||
m_log.WarnFormat(
|
||||
"[SCENE]: Attempt to update agent {0} with invalid session id {1} (possibly from simulator in older version; tell them to update).",
|
||||
sp.UUID, cAgentData.SessionID);
|
||||
|
||||
Console.WriteLine(String.Format("[SCENE]: Attempt to update agent {0} ({1}) with invalid session id {2}",
|
||||
childAgentUpdate.UUID, childAgentUpdate.ControllingClient.SessionId, cAgentData.SessionID));
|
||||
sp.UUID, sp.ControllingClient.SessionId, cAgentData.SessionID));
|
||||
}
|
||||
|
||||
childAgentUpdate.ChildAgentDataUpdate(cAgentData);
|
||||
sp.ChildAgentDataUpdate(cAgentData);
|
||||
|
||||
int ntimes = 20;
|
||||
if (cAgentData.SenderWantsToWaitForRoot)
|
||||
{
|
||||
while (childAgentUpdate.IsChildAgent && ntimes-- > 0)
|
||||
while (sp.IsChildAgent && ntimes-- > 0)
|
||||
Thread.Sleep(1000);
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[SCENE]: Found presence {0} {1} {2} in {3} after {4} waits",
|
||||
childAgentUpdate.Name, childAgentUpdate.UUID, childAgentUpdate.IsChildAgent ? "child" : "root", RegionInfo.RegionName, 20 - ntimes);
|
||||
sp.Name, sp.UUID, sp.IsChildAgent ? "child" : "root", Name, 20 - ntimes);
|
||||
|
||||
if (childAgentUpdate.IsChildAgent)
|
||||
if (sp.IsChildAgent)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -285,10 +285,24 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// </summary>
|
||||
private Vector3 posLastSignificantMove;
|
||||
|
||||
// For teleports and crossings callbacks
|
||||
#region For teleports and crossings callbacks
|
||||
|
||||
/// <summary>
|
||||
/// In the V1 teleport protocol, the destination simulator sends ReleaseAgent to this address.
|
||||
/// </summary>
|
||||
string m_callbackURI;
|
||||
|
||||
UUID m_originRegionID;
|
||||
|
||||
/// <summary>
|
||||
/// Used by the entity transfer module to signal when the presence should not be closed because a subsequent
|
||||
/// teleport is reusing the connection.
|
||||
/// </summary>
|
||||
/// <remarks>May be refactored or move somewhere else soon.</remarks>
|
||||
public bool DoNotCloseAfterTeleport { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
/// <value>
|
||||
/// Script engines present in the scene
|
||||
/// </value>
|
||||
|
@ -717,13 +731,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used by the entity transfer module to signal when the presence should not be closed because a subsequent
|
||||
/// teleport is reusing the connection.
|
||||
/// </summary>
|
||||
/// <remarks>May be refactored or move somewhere else soon.</remarks>
|
||||
public bool DoNotCloseAfterTeleport { get; set; }
|
||||
|
||||
private float m_speedModifier = 1.0f;
|
||||
|
||||
public float SpeedModifier
|
||||
|
@ -1325,14 +1332,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
int count = 20;
|
||||
while (m_originRegionID.Equals(UUID.Zero) && count-- > 0)
|
||||
{
|
||||
m_log.DebugFormat("[SCENE PRESENCE]: Agent {0} waiting for update in {1}", client.Name, Scene.RegionInfo.RegionName);
|
||||
m_log.DebugFormat("[SCENE PRESENCE]: Agent {0} waiting for update in {1}", client.Name, Scene.Name);
|
||||
Thread.Sleep(200);
|
||||
}
|
||||
|
||||
if (m_originRegionID.Equals(UUID.Zero))
|
||||
{
|
||||
// Movement into region will fail
|
||||
m_log.WarnFormat("[SCENE PRESENCE]: Update agent {0} never arrived", client.Name);
|
||||
m_log.WarnFormat("[SCENE PRESENCE]: Update agent {0} never arrived in {1}", client.Name, Scene.Name);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue