aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs19
1 files changed, 13 insertions, 6 deletions
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 }