aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs12
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs19
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs3
3 files changed, 21 insertions, 13 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 6274e02..a2322b7 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3395,10 +3395,10 @@ namespace OpenSim.Region.Framework.Scenes
3395 /// also return a reason.</returns> 3395 /// also return a reason.</returns>
3396 public bool NewUserConnection(AgentCircuitData agent, uint teleportFlags, out string reason, bool requirePresenceLookup) 3396 public bool NewUserConnection(AgentCircuitData agent, uint teleportFlags, out string reason, bool requirePresenceLookup)
3397 { 3397 {
3398 bool vialogin = ((teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0 || 3398 bool vialogin = ((teleportFlags & (uint)TPFlags.ViaLogin) != 0 ||
3399 (teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0); 3399 (teleportFlags & (uint)TPFlags.ViaHGLogin) != 0);
3400 bool viahome = ((teleportFlags & (uint)Constants.TeleportFlags.ViaHome) != 0); 3400 bool viahome = ((teleportFlags & (uint)TPFlags.ViaHome) != 0);
3401 bool godlike = ((teleportFlags & (uint)Constants.TeleportFlags.Godlike) != 0); 3401 bool godlike = ((teleportFlags & (uint)TPFlags.Godlike) != 0);
3402 3402
3403 reason = String.Empty; 3403 reason = String.Empty;
3404 3404
@@ -3411,9 +3411,9 @@ namespace OpenSim.Region.Framework.Scenes
3411 3411
3412 // Don't disable this log message - it's too helpful 3412 // Don't disable this log message - it's too helpful
3413 m_log.DebugFormat( 3413 m_log.DebugFormat(
3414 "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags {8}, position {9})", 3414 "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags ({8}), position {9})",
3415 RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname, 3415 RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname,
3416 agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, teleportFlags, agent.startpos); 3416 agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, ((TPFlags)teleportFlags).ToString(), agent.startpos);
3417 3417
3418 if (LoginsDisabled) 3418 if (LoginsDisabled)
3419 { 3419 {
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
index 27833e8..a3dd53e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
@@ -140,6 +140,7 @@ namespace OpenSim.Region.Framework.Scenes
140 icon.EndInvoke(iar); 140 icon.EndInvoke(iar);
141 } 141 }
142 142
143 ExpiringCache<string, bool> _failedSims = new ExpiringCache<string, bool>();
143 public void SendChildAgentDataUpdate(AgentPosition cAgentData, ScenePresence presence) 144 public void SendChildAgentDataUpdate(AgentPosition cAgentData, ScenePresence presence)
144 { 145 {
145 // This assumes that we know what our neighbors are. 146 // This assumes that we know what our neighbors are.
@@ -156,16 +157,22 @@ namespace OpenSim.Region.Framework.Scenes
156 // that the region position is cached or performance will degrade 157 // that the region position is cached or performance will degrade
157 Utils.LongToUInts(regionHandle, out x, out y); 158 Utils.LongToUInts(regionHandle, out x, out y);
158 GridRegion dest = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); 159 GridRegion dest = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y);
159 if (! simulatorList.Contains(dest.ServerURI)) 160 bool v = true;
161 if (! simulatorList.Contains(dest.ServerURI) && !_failedSims.TryGetValue(dest.ServerURI, out v))
160 { 162 {
161 // we havent seen this simulator before, add it to the list 163 // we havent seen this simulator before, add it to the list
162 // and send it an update 164 // and send it an update
163 simulatorList.Add(dest.ServerURI); 165 simulatorList.Add(dest.ServerURI);
164 166 // Let move this to sync. Mono definitely does not like async networking.
165 SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync; 167 if (!m_scene.SimulationService.UpdateAgent(dest, cAgentData))
166 d.BeginInvoke(cAgentData, m_regionInfo.ScopeID, dest, 168 // Also if it fails, get it out of the loop for a bit
167 SendChildAgentDataUpdateCompleted, 169 _failedSims.Add(dest.ServerURI, true, 120);
168 d); 170
171 // Leaving this here as a reminder that we tried, and it sucks.
172 //SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync;
173 //d.BeginInvoke(cAgentData, m_regionInfo.ScopeID, dest,
174 // SendChildAgentDataUpdateCompleted,
175 // d);
169 } 176 }
170 } 177 }
171 } 178 }
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 8a42616..b38523f 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2787,7 +2787,8 @@ namespace OpenSim.Region.Framework.Scenes
2787 AgentPosition agentpos = new AgentPosition(); 2787 AgentPosition agentpos = new AgentPosition();
2788 agentpos.CopyFrom(cadu); 2788 agentpos.CopyFrom(cadu);
2789 2789
2790 m_scene.SendOutChildAgentUpdates(agentpos, this); 2790 // Let's get this out of the update loop
2791 Util.FireAndForget(delegate { m_scene.SendOutChildAgentUpdates(agentpos, this); });
2791 } 2792 }
2792 } 2793 }
2793 2794