aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/ScenePresence.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs75
1 files changed, 43 insertions, 32 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 9ea0269..272fa16 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -287,6 +287,11 @@ namespace OpenSim.Region.Framework.Scenes
287 } 287 }
288 288
289 /// <summary> 289 /// <summary>
290 /// Set if initial data about the scene (avatars, objects) has been sent to the ControllingClient.
291 /// </summary>
292 public bool SentInitialDataToClient { get; private set; }
293
294 /// <summary>
290 /// Copy of the script states while the agent is in transit. This state may 295 /// Copy of the script states while the agent is in transit. This state may
291 /// need to be placed back in case of transfer fail. 296 /// need to be placed back in case of transfer fail.
292 /// </summary> 297 /// </summary>
@@ -1256,7 +1261,7 @@ namespace OpenSim.Region.Framework.Scenes
1256 } 1261 }
1257 } 1262 }
1258 1263
1259 SendAvatarDataToAllAgents(); 1264 SendAvatarDataToAllClients();
1260 1265
1261 // send the animations of the other presences to me 1266 // send the animations of the other presences to me
1262 m_scene.ForEachRootScenePresence(delegate(ScenePresence presence) 1267 m_scene.ForEachRootScenePresence(delegate(ScenePresence presence)
@@ -1296,7 +1301,7 @@ namespace OpenSim.Region.Framework.Scenes
1296 m_log.DebugFormat("[SCENE PRESENCE]: Forcing viewers to update the avatar name for " + Name); 1301 m_log.DebugFormat("[SCENE PRESENCE]: Forcing viewers to update the avatar name for " + Name);
1297 1302
1298 UseFakeGroupTitle = true; 1303 UseFakeGroupTitle = true;
1299 SendAvatarDataToAllAgents(false); 1304 SendAvatarDataToAllClients(false);
1300 1305
1301 Util.FireAndForget(o => 1306 Util.FireAndForget(o =>
1302 { 1307 {
@@ -1307,7 +1312,7 @@ namespace OpenSim.Region.Framework.Scenes
1307 Thread.Sleep(5000); 1312 Thread.Sleep(5000);
1308 1313
1309 UseFakeGroupTitle = false; 1314 UseFakeGroupTitle = false;
1310 SendAvatarDataToAllAgents(false); 1315 SendAvatarDataToAllClients(false);
1311 }); 1316 });
1312 } 1317 }
1313 1318
@@ -1742,9 +1747,9 @@ namespace OpenSim.Region.Framework.Scenes
1742 // Tell the client that we're totally ready 1747 // Tell the client that we're totally ready
1743 ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look); 1748 ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look);
1744 1749
1745 // Remember in HandleUseCircuitCode, we delayed this to here 1750 // Child agents send initial data up in LLUDPServer.HandleUseCircuitCode()
1746 if (m_teleportFlags > 0) 1751 if (!SentInitialDataToClient)
1747 SendInitialDataToMe(); 1752 SendInitialDataToClient();
1748 1753
1749 // m_log.DebugFormat("[SCENE PRESENCE] Completed movement"); 1754 // m_log.DebugFormat("[SCENE PRESENCE] Completed movement");
1750 1755
@@ -2652,7 +2657,7 @@ namespace OpenSim.Region.Framework.Scenes
2652 2657
2653 if (satOnObject) 2658 if (satOnObject)
2654 { 2659 {
2655 SendAvatarDataToAllAgents(); 2660 SendAvatarDataToAllClients();
2656 m_requestedSitTargetID = 0; 2661 m_requestedSitTargetID = 0;
2657 2662
2658 part.RemoveSittingAvatar(this); 2663 part.RemoveSittingAvatar(this);
@@ -2947,7 +2952,7 @@ namespace OpenSim.Region.Framework.Scenes
2947 Animator.TrySetMovementAnimation("SIT_GROUND"); 2952 Animator.TrySetMovementAnimation("SIT_GROUND");
2948 else 2953 else
2949 Animator.TrySetMovementAnimation("SIT"); 2954 Animator.TrySetMovementAnimation("SIT");
2950 SendAvatarDataToAllAgents(); 2955 SendAvatarDataToAllClients();
2951 2956
2952 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); 2957 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK);
2953 } 2958 }
@@ -3062,7 +3067,7 @@ namespace OpenSim.Region.Framework.Scenes
3062 sitAnimation = part.SitAnimation; 3067 sitAnimation = part.SitAnimation;
3063 } 3068 }
3064 Animator.TrySetMovementAnimation(sitAnimation); 3069 Animator.TrySetMovementAnimation(sitAnimation);
3065 SendAvatarDataToAllAgents(); 3070 SendAvatarDataToAllClients();
3066 TriggerScenePresenceUpdated(); 3071 TriggerScenePresenceUpdated();
3067 } 3072 }
3068 } 3073 }
@@ -3185,7 +3190,7 @@ namespace OpenSim.Region.Framework.Scenes
3185 // grab the latest PhysicsActor velocity, whereas m_velocity is often 3190 // grab the latest PhysicsActor velocity, whereas m_velocity is often
3186 // storing a requested force instead of an actual traveling velocity 3191 // storing a requested force instead of an actual traveling velocity
3187 if (Appearance.AvatarSize != m_lastSize && !IsLoggingIn) 3192 if (Appearance.AvatarSize != m_lastSize && !IsLoggingIn)
3188 SendAvatarDataToAllAgents(); 3193 SendAvatarDataToAllClients();
3189 3194
3190 // Allow any updates for sitting avatars to that llSetPrimitiveLinkParams() can work for very 3195 // Allow any updates for sitting avatars to that llSetPrimitiveLinkParams() can work for very
3191 // small increments (e.g. sit position adjusters). An alternative may be to eliminate the tolerance 3196 // small increments (e.g. sit position adjusters). An alternative may be to eliminate the tolerance
@@ -3339,16 +3344,22 @@ namespace OpenSim.Region.Framework.Scenes
3339 ControllingClient.SendCoarseLocationUpdate(avatarUUIDs, coarseLocations); 3344 ControllingClient.SendCoarseLocationUpdate(avatarUUIDs, coarseLocations);
3340 } 3345 }
3341 3346
3342 public void SendInitialDataToMe() 3347 public void SendInitialDataToClient()
3343 { 3348 {
3349 SentInitialDataToClient = true;
3350
3344 // Send all scene object to the new client 3351 // Send all scene object to the new client
3345 Util.RunThreadNoTimeout(delegate 3352 Util.RunThreadNoTimeout(delegate
3346 { 3353 {
3354 m_log.DebugFormat(
3355 "[SCENE PRESENCE]: Sending initial data to {0} agent {1} in {2}, tp flags {3}",
3356 IsChildAgent ? "child" : "root", Name, Scene.Name, m_teleportFlags);
3357
3347 // we created a new ScenePresence (a new child agent) in a fresh region. 3358 // we created a new ScenePresence (a new child agent) in a fresh region.
3348 // Request info about all the (root) agents in this region 3359 // Request info about all the (root) agents in this region
3349 // Note: This won't send data *to* other clients in that region (children don't send) 3360 // Note: This won't send data *to* other clients in that region (children don't send)
3350 SendOtherAgentsAvatarDataToMe(); 3361 SendOtherAgentsAvatarDataToClient();
3351 SendOtherAgentsAppearanceToMe(); 3362 SendOtherAgentsAppearanceToClient();
3352 3363
3353 EntityBase[] entities = Scene.Entities.GetEntities(); 3364 EntityBase[] entities = Scene.Entities.GetEntities();
3354 foreach (EntityBase e in entities) 3365 foreach (EntityBase e in entities)
@@ -3357,7 +3368,7 @@ namespace OpenSim.Region.Framework.Scenes
3357 ((SceneObjectGroup)e).SendFullUpdateToClient(ControllingClient); 3368 ((SceneObjectGroup)e).SendFullUpdateToClient(ControllingClient);
3358 } 3369 }
3359 3370
3360 }, "SendInitialDataToMe", null); 3371 }, "SendInitialDataToClient", null);
3361 } 3372 }
3362 3373
3363 /// <summary> 3374 /// <summary>
@@ -3390,10 +3401,10 @@ namespace OpenSim.Region.Framework.Scenes
3390 // getting other avatars information was initiated elsewhere immediately after the child circuit connected... don't do it 3401 // getting other avatars information was initiated elsewhere immediately after the child circuit connected... don't do it
3391 // again here... this comes after the cached appearance check because the avatars 3402 // again here... this comes after the cached appearance check because the avatars
3392 // appearance goes into the avatar update packet 3403 // appearance goes into the avatar update packet
3393 SendAvatarDataToAllAgents(); 3404 SendAvatarDataToAllClients();
3394 3405
3395 // This invocation always shows up in the viewer logs as an error. Is it needed? 3406 // This invocation always shows up in the viewer logs as an error. Is it needed?
3396 SendAppearanceToAgent(this); 3407 SendAppearanceToClient(this);
3397 3408
3398 // If we are using the the cached appearance then send it out to everyone 3409 // If we are using the the cached appearance then send it out to everyone
3399 if (cachedappearance) 3410 if (cachedappearance)
@@ -3403,20 +3414,20 @@ namespace OpenSim.Region.Framework.Scenes
3403 // If the avatars baked textures are all in the cache, then we have a 3414 // If the avatars baked textures are all in the cache, then we have a
3404 // complete appearance... send it out, if not, then we'll send it when 3415 // complete appearance... send it out, if not, then we'll send it when
3405 // the avatar finishes updating its appearance 3416 // the avatar finishes updating its appearance
3406 SendAppearanceToAllOtherAgents(); 3417 SendAppearanceToAllOtherClients();
3407 } 3418 }
3408 } 3419 }
3409 3420
3410 public void SendAvatarDataToAllAgents() 3421 public void SendAvatarDataToAllClients()
3411 { 3422 {
3412 SendAvatarDataToAllAgents(true); 3423 SendAvatarDataToAllClients(true);
3413 } 3424 }
3414 3425
3415 /// <summary> 3426 /// <summary>
3416 /// Send this agent's avatar data to all other root and child agents in the scene 3427 /// Send this agent's avatar data to all other root and child agents in the scene
3417 /// This agent must be root. This avatar will receive its own update. 3428 /// This agent must be root. This avatar will receive its own update.
3418 /// </summary> 3429 /// </summary>
3419 public void SendAvatarDataToAllAgents(bool full) 3430 public void SendAvatarDataToAllClients(bool full)
3420 { 3431 {
3421 //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAllAgents: {0} ({1})", Name, UUID); 3432 //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAllAgents: {0} ({1})", Name, UUID);
3422 // only send update from root agents to other clients; children are only "listening posts" 3433 // only send update from root agents to other clients; children are only "listening posts"
@@ -3435,7 +3446,7 @@ namespace OpenSim.Region.Framework.Scenes
3435 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) 3446 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
3436 { 3447 {
3437 if (full) 3448 if (full)
3438 SendAvatarDataToAgent(scenePresence); 3449 SendAvatarDataToClient(scenePresence);
3439 else 3450 else
3440 scenePresence.ControllingClient.SendAvatarDataImmediate(this); 3451 scenePresence.ControllingClient.SendAvatarDataImmediate(this);
3441 count++; 3452 count++;
@@ -3448,7 +3459,7 @@ namespace OpenSim.Region.Framework.Scenes
3448 /// Send avatar data for all other root agents to this agent, this agent 3459 /// Send avatar data for all other root agents to this agent, this agent
3449 /// can be either a child or root 3460 /// can be either a child or root
3450 /// </summary> 3461 /// </summary>
3451 public void SendOtherAgentsAvatarDataToMe() 3462 public void SendOtherAgentsAvatarDataToClient()
3452 { 3463 {
3453 int count = 0; 3464 int count = 0;
3454 m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence) 3465 m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
@@ -3457,7 +3468,7 @@ namespace OpenSim.Region.Framework.Scenes
3457 if (scenePresence.UUID == UUID) 3468 if (scenePresence.UUID == UUID)
3458 return; 3469 return;
3459 3470
3460 scenePresence.SendAvatarDataToAgent(this); 3471 scenePresence.SendAvatarDataToClient(this);
3461 count++; 3472 count++;
3462 }); 3473 });
3463 3474
@@ -3468,9 +3479,9 @@ namespace OpenSim.Region.Framework.Scenes
3468 /// Send avatar data to an agent. 3479 /// Send avatar data to an agent.
3469 /// </summary> 3480 /// </summary>
3470 /// <param name="avatar"></param> 3481 /// <param name="avatar"></param>
3471 public void SendAvatarDataToAgent(ScenePresence avatar) 3482 public void SendAvatarDataToClient(ScenePresence avatar)
3472 { 3483 {
3473 //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID); 3484 //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToClient from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID);
3474 3485
3475 avatar.ControllingClient.SendAvatarDataImmediate(this); 3486 avatar.ControllingClient.SendAvatarDataImmediate(this);
3476 Animator.SendAnimPackToClient(avatar.ControllingClient); 3487 Animator.SendAnimPackToClient(avatar.ControllingClient);
@@ -3480,9 +3491,9 @@ namespace OpenSim.Region.Framework.Scenes
3480 /// Send this agent's appearance to all other root and child agents in the scene 3491 /// Send this agent's appearance to all other root and child agents in the scene
3481 /// This agent must be root. 3492 /// This agent must be root.
3482 /// </summary> 3493 /// </summary>
3483 public void SendAppearanceToAllOtherAgents() 3494 public void SendAppearanceToAllOtherClients()
3484 { 3495 {
3485// m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherAgents: {0} {1}", Name, UUID); 3496// m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherClients: {0} {1}", Name, UUID);
3486 3497
3487 // only send update from root agents to other clients; children are only "listening posts" 3498 // only send update from root agents to other clients; children are only "listening posts"
3488 if (IsChildAgent) 3499 if (IsChildAgent)
@@ -3501,7 +3512,7 @@ namespace OpenSim.Region.Framework.Scenes
3501 if (scenePresence.UUID == UUID) 3512 if (scenePresence.UUID == UUID)
3502 return; 3513 return;
3503 3514
3504 SendAppearanceToAgent(scenePresence); 3515 SendAppearanceToClient(scenePresence);
3505 count++; 3516 count++;
3506 }); 3517 });
3507 3518
@@ -3512,9 +3523,9 @@ namespace OpenSim.Region.Framework.Scenes
3512 /// Send appearance from all other root agents to this agent. this agent 3523 /// Send appearance from all other root agents to this agent. this agent
3513 /// can be either root or child 3524 /// can be either root or child
3514 /// </summary> 3525 /// </summary>
3515 public void SendOtherAgentsAppearanceToMe() 3526 public void SendOtherAgentsAppearanceToClient()
3516 { 3527 {
3517// m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} {1}", Name, UUID); 3528// m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToClient {0} {1}", Name, UUID);
3518 3529
3519 int count = 0; 3530 int count = 0;
3520 m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence) 3531 m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
@@ -3523,7 +3534,7 @@ namespace OpenSim.Region.Framework.Scenes
3523 if (scenePresence.UUID == UUID) 3534 if (scenePresence.UUID == UUID)
3524 return; 3535 return;
3525 3536
3526 scenePresence.SendAppearanceToAgent(this); 3537 scenePresence.SendAppearanceToClient(this);
3527 count++; 3538 count++;
3528 }); 3539 });
3529 3540
@@ -3534,7 +3545,7 @@ namespace OpenSim.Region.Framework.Scenes
3534 /// Send appearance data to an agent. 3545 /// Send appearance data to an agent.
3535 /// </summary> 3546 /// </summary>
3536 /// <param name="avatar"></param> 3547 /// <param name="avatar"></param>
3537 public void SendAppearanceToAgent(ScenePresence avatar) 3548 public void SendAppearanceToClient(ScenePresence avatar)
3538 { 3549 {
3539// m_log.DebugFormat( 3550// m_log.DebugFormat(
3540// "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID); 3551// "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID);