On teleport to a region that already has a child agent established (e.g. a neighbour) don't resend all the initial avatar and object data again.
This is unnecessary since it has been received (and data continues to be received) in the existing child connection.bullet-2.82
parent
626536b8cc
commit
91e1aaa5d4
|
@ -1296,7 +1296,7 @@ namespace OpenSim.Groups
|
|||
presence.Grouptitle = Title;
|
||||
|
||||
if (! presence.IsChildAgent)
|
||||
presence.SendAvatarDataToAllAgents();
|
||||
presence.SendAvatarDataToAllClients();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@ namespace OpenSim.Framework
|
|||
/// <remarks>
|
||||
/// This includes scene object data and the appearance data of other avatars.
|
||||
/// </remarks>
|
||||
void SendInitialDataToMe();
|
||||
void SendInitialDataToClient();
|
||||
|
||||
/// <summary>
|
||||
/// Direction in which the scene presence is looking.
|
||||
|
|
|
@ -1741,7 +1741,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
bool tp = (aCircuit.teleportFlags > 0);
|
||||
// Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
|
||||
if (!tp)
|
||||
client.SceneAgent.SendInitialDataToMe();
|
||||
client.SceneAgent.SendInitialDataToClient();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -251,7 +251,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
private void SendAppearance(ScenePresence sp)
|
||||
{
|
||||
// Send the appearance to everyone in the scene
|
||||
sp.SendAppearanceToAllOtherAgents();
|
||||
sp.SendAppearanceToAllOtherClients();
|
||||
|
||||
// Send animations back to the avatar as well
|
||||
sp.Animator.SendAnimPack();
|
||||
|
|
|
@ -1786,8 +1786,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
||||
|
||||
// now we have a child agent in this region. Request all interesting data about other (root) agents
|
||||
agent.SendOtherAgentsAvatarDataToMe();
|
||||
agent.SendOtherAgentsAppearanceToMe();
|
||||
agent.SendOtherAgentsAvatarDataToClient();
|
||||
agent.SendOtherAgentsAppearanceToClient();
|
||||
|
||||
// Backwards compatibility. Best effort
|
||||
if (version == "Unknown" || version == string.Empty)
|
||||
|
|
|
@ -286,6 +286,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set if initial data about the scene (avatars, objects) has been sent to the ControllingClient.
|
||||
/// </summary>
|
||||
public bool SentInitialDataToClient { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Copy of the script states while the agent is in transit. This state may
|
||||
/// need to be placed back in case of transfer fail.
|
||||
|
@ -1256,7 +1261,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
SendAvatarDataToAllAgents();
|
||||
SendAvatarDataToAllClients();
|
||||
|
||||
// send the animations of the other presences to me
|
||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence presence)
|
||||
|
@ -1296,7 +1301,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_log.DebugFormat("[SCENE PRESENCE]: Forcing viewers to update the avatar name for " + Name);
|
||||
|
||||
UseFakeGroupTitle = true;
|
||||
SendAvatarDataToAllAgents(false);
|
||||
SendAvatarDataToAllClients(false);
|
||||
|
||||
Util.FireAndForget(o =>
|
||||
{
|
||||
|
@ -1307,7 +1312,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
Thread.Sleep(5000);
|
||||
|
||||
UseFakeGroupTitle = false;
|
||||
SendAvatarDataToAllAgents(false);
|
||||
SendAvatarDataToAllClients(false);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1742,9 +1747,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// Tell the client that we're totally ready
|
||||
ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look);
|
||||
|
||||
// Remember in HandleUseCircuitCode, we delayed this to here
|
||||
if (m_teleportFlags > 0)
|
||||
SendInitialDataToMe();
|
||||
// Child agents send initial data up in LLUDPServer.HandleUseCircuitCode()
|
||||
if (!SentInitialDataToClient)
|
||||
SendInitialDataToClient();
|
||||
|
||||
// m_log.DebugFormat("[SCENE PRESENCE] Completed movement");
|
||||
|
||||
|
@ -2652,7 +2657,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (satOnObject)
|
||||
{
|
||||
SendAvatarDataToAllAgents();
|
||||
SendAvatarDataToAllClients();
|
||||
m_requestedSitTargetID = 0;
|
||||
|
||||
part.RemoveSittingAvatar(this);
|
||||
|
@ -2947,7 +2952,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
Animator.TrySetMovementAnimation("SIT_GROUND");
|
||||
else
|
||||
Animator.TrySetMovementAnimation("SIT");
|
||||
SendAvatarDataToAllAgents();
|
||||
SendAvatarDataToAllClients();
|
||||
|
||||
part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK);
|
||||
}
|
||||
|
@ -3062,7 +3067,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
sitAnimation = part.SitAnimation;
|
||||
}
|
||||
Animator.TrySetMovementAnimation(sitAnimation);
|
||||
SendAvatarDataToAllAgents();
|
||||
SendAvatarDataToAllClients();
|
||||
TriggerScenePresenceUpdated();
|
||||
}
|
||||
}
|
||||
|
@ -3185,7 +3190,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// grab the latest PhysicsActor velocity, whereas m_velocity is often
|
||||
// storing a requested force instead of an actual traveling velocity
|
||||
if (Appearance.AvatarSize != m_lastSize && !IsLoggingIn)
|
||||
SendAvatarDataToAllAgents();
|
||||
SendAvatarDataToAllClients();
|
||||
|
||||
// Allow any updates for sitting avatars to that llSetPrimitiveLinkParams() can work for very
|
||||
// small increments (e.g. sit position adjusters). An alternative may be to eliminate the tolerance
|
||||
|
@ -3339,16 +3344,22 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
ControllingClient.SendCoarseLocationUpdate(avatarUUIDs, coarseLocations);
|
||||
}
|
||||
|
||||
public void SendInitialDataToMe()
|
||||
public void SendInitialDataToClient()
|
||||
{
|
||||
SentInitialDataToClient = true;
|
||||
|
||||
// Send all scene object to the new client
|
||||
Util.RunThreadNoTimeout(delegate
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[SCENE PRESENCE]: Sending initial data to {0} agent {1} in {2}, tp flags {3}",
|
||||
IsChildAgent ? "child" : "root", Name, Scene.Name, m_teleportFlags);
|
||||
|
||||
// we created a new ScenePresence (a new child agent) in a fresh region.
|
||||
// Request info about all the (root) agents in this region
|
||||
// Note: This won't send data *to* other clients in that region (children don't send)
|
||||
SendOtherAgentsAvatarDataToMe();
|
||||
SendOtherAgentsAppearanceToMe();
|
||||
SendOtherAgentsAvatarDataToClient();
|
||||
SendOtherAgentsAppearanceToClient();
|
||||
|
||||
EntityBase[] entities = Scene.Entities.GetEntities();
|
||||
foreach (EntityBase e in entities)
|
||||
|
@ -3357,7 +3368,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
((SceneObjectGroup)e).SendFullUpdateToClient(ControllingClient);
|
||||
}
|
||||
|
||||
}, "SendInitialDataToMe", null);
|
||||
}, "SendInitialDataToClient", null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -3390,10 +3401,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// getting other avatars information was initiated elsewhere immediately after the child circuit connected... don't do it
|
||||
// again here... this comes after the cached appearance check because the avatars
|
||||
// appearance goes into the avatar update packet
|
||||
SendAvatarDataToAllAgents();
|
||||
SendAvatarDataToAllClients();
|
||||
|
||||
// This invocation always shows up in the viewer logs as an error. Is it needed?
|
||||
SendAppearanceToAgent(this);
|
||||
SendAppearanceToClient(this);
|
||||
|
||||
// If we are using the the cached appearance then send it out to everyone
|
||||
if (cachedappearance)
|
||||
|
@ -3403,20 +3414,20 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// If the avatars baked textures are all in the cache, then we have a
|
||||
// complete appearance... send it out, if not, then we'll send it when
|
||||
// the avatar finishes updating its appearance
|
||||
SendAppearanceToAllOtherAgents();
|
||||
SendAppearanceToAllOtherClients();
|
||||
}
|
||||
}
|
||||
|
||||
public void SendAvatarDataToAllAgents()
|
||||
public void SendAvatarDataToAllClients()
|
||||
{
|
||||
SendAvatarDataToAllAgents(true);
|
||||
SendAvatarDataToAllClients(true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send this agent's avatar data to all other root and child agents in the scene
|
||||
/// This agent must be root. This avatar will receive its own update.
|
||||
/// </summary>
|
||||
public void SendAvatarDataToAllAgents(bool full)
|
||||
public void SendAvatarDataToAllClients(bool full)
|
||||
{
|
||||
//m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAllAgents: {0} ({1})", Name, UUID);
|
||||
// only send update from root agents to other clients; children are only "listening posts"
|
||||
|
@ -3435,7 +3446,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
|
||||
{
|
||||
if (full)
|
||||
SendAvatarDataToAgent(scenePresence);
|
||||
SendAvatarDataToClient(scenePresence);
|
||||
else
|
||||
scenePresence.ControllingClient.SendAvatarDataImmediate(this);
|
||||
count++;
|
||||
|
@ -3448,7 +3459,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// Send avatar data for all other root agents to this agent, this agent
|
||||
/// can be either a child or root
|
||||
/// </summary>
|
||||
public void SendOtherAgentsAvatarDataToMe()
|
||||
public void SendOtherAgentsAvatarDataToClient()
|
||||
{
|
||||
int count = 0;
|
||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
|
||||
|
@ -3457,7 +3468,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (scenePresence.UUID == UUID)
|
||||
return;
|
||||
|
||||
scenePresence.SendAvatarDataToAgent(this);
|
||||
scenePresence.SendAvatarDataToClient(this);
|
||||
count++;
|
||||
});
|
||||
|
||||
|
@ -3468,9 +3479,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// Send avatar data to an agent.
|
||||
/// </summary>
|
||||
/// <param name="avatar"></param>
|
||||
public void SendAvatarDataToAgent(ScenePresence avatar)
|
||||
public void SendAvatarDataToClient(ScenePresence avatar)
|
||||
{
|
||||
//m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID);
|
||||
//m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToClient from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID);
|
||||
|
||||
avatar.ControllingClient.SendAvatarDataImmediate(this);
|
||||
Animator.SendAnimPackToClient(avatar.ControllingClient);
|
||||
|
@ -3480,9 +3491,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// Send this agent's appearance to all other root and child agents in the scene
|
||||
/// This agent must be root.
|
||||
/// </summary>
|
||||
public void SendAppearanceToAllOtherAgents()
|
||||
public void SendAppearanceToAllOtherClients()
|
||||
{
|
||||
// m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherAgents: {0} {1}", Name, UUID);
|
||||
// m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherClients: {0} {1}", Name, UUID);
|
||||
|
||||
// only send update from root agents to other clients; children are only "listening posts"
|
||||
if (IsChildAgent)
|
||||
|
@ -3501,7 +3512,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (scenePresence.UUID == UUID)
|
||||
return;
|
||||
|
||||
SendAppearanceToAgent(scenePresence);
|
||||
SendAppearanceToClient(scenePresence);
|
||||
count++;
|
||||
});
|
||||
|
||||
|
@ -3512,9 +3523,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// Send appearance from all other root agents to this agent. this agent
|
||||
/// can be either root or child
|
||||
/// </summary>
|
||||
public void SendOtherAgentsAppearanceToMe()
|
||||
public void SendOtherAgentsAppearanceToClient()
|
||||
{
|
||||
// m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} {1}", Name, UUID);
|
||||
// m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToClient {0} {1}", Name, UUID);
|
||||
|
||||
int count = 0;
|
||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
|
||||
|
@ -3523,7 +3534,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (scenePresence.UUID == UUID)
|
||||
return;
|
||||
|
||||
scenePresence.SendAppearanceToAgent(this);
|
||||
scenePresence.SendAppearanceToClient(this);
|
||||
count++;
|
||||
});
|
||||
|
||||
|
@ -3534,7 +3545,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// Send appearance data to an agent.
|
||||
/// </summary>
|
||||
/// <param name="avatar"></param>
|
||||
public void SendAppearanceToAgent(ScenePresence avatar)
|
||||
public void SendAppearanceToClient(ScenePresence avatar)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID);
|
||||
|
|
|
@ -1381,7 +1381,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
presence.Grouptitle = Title;
|
||||
|
||||
if (! presence.IsChildAgent)
|
||||
presence.SendAvatarDataToAllAgents();
|
||||
presence.SendAvatarDataToAllClients();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue