aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs71
1 files changed, 32 insertions, 39 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 810c3b4..e5906f3 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -695,9 +695,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
695 Vector3 eastCross = new Vector3(boundaryDistance, 0, 0); 695 Vector3 eastCross = new Vector3(boundaryDistance, 0, 0);
696 Vector3 westCross = new Vector3(-1 * boundaryDistance, 0, 0); 696 Vector3 westCross = new Vector3(-1 * boundaryDistance, 0, 0);
697 697
698 // distance to edge that will trigger crossing
699
700
701 // distance into new region to place avatar 698 // distance into new region to place avatar
702 const float enterDistance = 0.5f; 699 const float enterDistance = 0.5f;
703 700
@@ -979,29 +976,31 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
979 m_log.DebugFormat( 976 m_log.DebugFormat(
980 "[ENTITY TRANSFER MODULE]: Failed validation of all attachments for region crossing of {0} from {1} to {2}. Continuing.", 977 "[ENTITY TRANSFER MODULE]: Failed validation of all attachments for region crossing of {0} from {1} to {2}. Continuing.",
981 agent.Name, agent.Scene.RegionInfo.RegionName, neighbourRegion.RegionName); 978 agent.Name, agent.Scene.RegionInfo.RegionName, neighbourRegion.RegionName);
982 979
983 pos = pos + (agent.Velocity); 980 pos = pos + agent.Velocity;
984 981 Vector3 vel2 = new Vector3(agent.Velocity.X, agent.Velocity.Y, 0);
982
983 agent.RemoveFromPhysicalScene();
985 SetInTransit(agent.UUID); 984 SetInTransit(agent.UUID);
986 AgentData cAgent = new AgentData(); 985
986 AgentData cAgent = new AgentData();
987 agent.CopyTo(cAgent); 987 agent.CopyTo(cAgent);
988 cAgent.Position = pos; 988 cAgent.Position = pos;
989 if (isFlying) 989 if (isFlying)
990 cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY; 990 cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY;
991 cAgent.CallbackURI = m_scene.RegionInfo.ServerURI + 991
992 "agent/" + agent.UUID.ToString() + "/" + m_scene.RegionInfo.RegionID.ToString() + "/release/"; 992 // We don't need the callback anymnore
993 993 cAgent.CallbackURI = String.Empty;
994
994 if (!m_scene.SimulationService.UpdateAgent(neighbourRegion, cAgent)) 995 if (!m_scene.SimulationService.UpdateAgent(neighbourRegion, cAgent))
995 { 996 {
996 // region doesn't take it 997 // region doesn't take it
997 ReInstantiateScripts(agent); 998 ReInstantiateScripts(agent);
999 agent.AddToPhysicalScene(isFlying);
998 ResetFromTransit(agent.UUID); 1000 ResetFromTransit(agent.UUID);
999 return agent; 1001 return agent;
1000 } 1002 }
1001 1003
1002 // Next, let's close the child agent connections that are too far away.
1003 agent.CloseChildAgents(neighbourx, neighboury);
1004
1005 //AgentCircuitData circuitdata = m_controllingClient.RequestClientInfo(); 1004 //AgentCircuitData circuitdata = m_controllingClient.RequestClientInfo();
1006 agent.ControllingClient.RequestClientInfo(); 1005 agent.ControllingClient.RequestClientInfo();
1007 1006
@@ -1018,11 +1017,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1018 string capsPath = neighbourRegion.ServerURI + CapsUtil.GetCapsSeedPath(agentcaps); 1017 string capsPath = neighbourRegion.ServerURI + CapsUtil.GetCapsSeedPath(agentcaps);
1019 1018
1020 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, agent.UUID); 1019 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, agent.UUID);
1021 1020
1022 IEventQueue eq = agent.Scene.RequestModuleInterface<IEventQueue>(); 1021 IEventQueue eq = agent.Scene.RequestModuleInterface<IEventQueue>();
1023 if (eq != null) 1022 if (eq != null)
1024 { 1023 {
1025 eq.CrossRegion(neighbourHandle, pos, agent.Velocity, neighbourRegion.ExternalEndPoint, 1024 eq.CrossRegion(neighbourHandle, pos, vel2 /* agent.Velocity */, neighbourRegion.ExternalEndPoint,
1026 capsPath, agent.UUID, agent.ControllingClient.SessionId); 1025 capsPath, agent.UUID, agent.ControllingClient.SessionId);
1027 } 1026 }
1028 else 1027 else
@@ -1030,32 +1029,26 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1030 agent.ControllingClient.CrossRegion(neighbourHandle, pos, agent.Velocity, neighbourRegion.ExternalEndPoint, 1029 agent.ControllingClient.CrossRegion(neighbourHandle, pos, agent.Velocity, neighbourRegion.ExternalEndPoint,
1031 capsPath); 1030 capsPath);
1032 } 1031 }
1033 1032
1034 if (!WaitForCallback(agent.UUID)) 1033 // SUCCESS!
1035 {
1036 m_log.Debug("[ENTITY TRANSFER MODULE]: Callback never came in crossing agent");
1037 ReInstantiateScripts(agent);
1038 ResetFromTransit(agent.UUID);
1039
1040 // Yikes! We should just have a ref to scene here.
1041 //agent.Scene.InformClientOfNeighbours(agent);
1042 EnableChildAgents(agent);
1043
1044 return agent;
1045 }
1046
1047 agent.MakeChildAgent(); 1034 agent.MakeChildAgent();
1048 1035 ResetFromTransit(agent.UUID);
1036
1049 // now we have a child agent in this region. Request all interesting data about other (root) agents 1037 // now we have a child agent in this region. Request all interesting data about other (root) agents
1050 agent.SendOtherAgentsAvatarDataToMe(); 1038 agent.SendOtherAgentsAvatarDataToMe();
1051 agent.SendOtherAgentsAppearanceToMe(); 1039 agent.SendOtherAgentsAppearanceToMe();
1052 1040
1053 // Backwards compatibility 1041 // Backwards compatibility. Best effort
1054 if (version == "Unknown" || version == string.Empty) 1042 if (version == "Unknown" || version == string.Empty)
1055 { 1043 {
1056 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Old neighbor, passing attachments one by one..."); 1044 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: neighbor with old version, passing attachments one by one...");
1045 Thread.Sleep(3000); // wait a little now that we're not waiting for the callback
1057 CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true); 1046 CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true);
1058 } 1047 }
1048
1049
1050 // Next, let's close the child agent connections that are too far away.
1051 agent.CloseChildAgents(neighbourx, neighboury);
1059 1052
1060 AgentHasMovedAway(agent, false); 1053 AgentHasMovedAway(agent, false);
1061 1054
@@ -1088,16 +1081,16 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1088 CrossAgentToNewRegionDelegate icon = (CrossAgentToNewRegionDelegate)iar.AsyncState; 1081 CrossAgentToNewRegionDelegate icon = (CrossAgentToNewRegionDelegate)iar.AsyncState;
1089 ScenePresence agent = icon.EndInvoke(iar); 1082 ScenePresence agent = icon.EndInvoke(iar);
1090 1083
1091 // If the cross was successful, this agent is a child agent 1084 //// If the cross was successful, this agent is a child agent
1092 if (agent.IsChildAgent) 1085 //if (agent.IsChildAgent)
1093 agent.Reset(); 1086 // agent.Reset();
1094 else // Not successful 1087 //else // Not successful
1095 agent.RestoreInCurrentScene(); 1088 // agent.RestoreInCurrentScene();
1096 1089
1097 // In any case 1090 // In any case
1098 agent.IsInTransit = false; 1091 agent.IsInTransit = false;
1099 1092
1100 //m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Crossing agent {0} {1} completed.", agent.Firstname, agent.Lastname); 1093 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Crossing agent {0} {1} completed.", agent.Firstname, agent.Lastname);
1101 } 1094 }
1102 1095
1103 #endregion 1096 #endregion