diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index eff635b..c1414ee 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | |||
@@ -182,10 +182,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
182 | } | 182 | } |
183 | } | 183 | } |
184 | 184 | ||
185 | public delegate void SendCloseChildAgentDelegate(UUID agentID, ulong regionHandle); | ||
186 | |||
185 | /// <summary> | 187 | /// <summary> |
186 | /// Closes a child agent on a given region | 188 | /// This Closes child agents on neighboring regions |
189 | /// Calls an asynchronous method to do so.. so it doesn't lag the sim. | ||
187 | /// </summary> | 190 | /// </summary> |
188 | protected void SendCloseChildAgent(UUID agentID, ulong regionHandle) | 191 | protected void SendCloseChildAgentAsync(UUID agentID, ulong regionHandle) |
189 | { | 192 | { |
190 | // let's do our best, but there's not much we can do if the neighbour doesn't accept. | 193 | // let's do our best, but there's not much we can do if the neighbour doesn't accept. |
191 | 194 | ||
@@ -194,30 +197,29 @@ namespace OpenSim.Region.Framework.Scenes | |||
194 | Utils.LongToUInts(regionHandle, out x, out y); | 197 | Utils.LongToUInts(regionHandle, out x, out y); |
195 | 198 | ||
196 | GridRegion destination = m_scene.GridService.GetRegionByPosition(m_regionInfo.ScopeID, (int)x, (int)y); | 199 | GridRegion destination = m_scene.GridService.GetRegionByPosition(m_regionInfo.ScopeID, (int)x, (int)y); |
200 | m_scene.SimulationService.CloseChildAgent(destination, agentID); | ||
201 | } | ||
197 | 202 | ||
198 | m_log.DebugFormat( | 203 | private void SendCloseChildAgentCompleted(IAsyncResult iar) |
199 | "[SCENE COMMUNICATION SERVICE]: Sending close agent ID {0} to {1}", agentID, destination.RegionName); | 204 | { |
200 | 205 | SendCloseChildAgentDelegate icon = (SendCloseChildAgentDelegate)iar.AsyncState; | |
201 | m_scene.SimulationService.CloseAgent(destination, agentID); | 206 | icon.EndInvoke(iar); |
202 | } | 207 | } |
203 | 208 | ||
204 | /// <summary> | ||
205 | /// Closes a child agents in a collection of regions. Does so asynchronously | ||
206 | /// so that the caller doesn't wait. | ||
207 | /// </summary> | ||
208 | /// <param name="agentID"></param> | ||
209 | /// <param name="regionslst"></param> | ||
210 | public void SendCloseChildAgentConnections(UUID agentID, List<ulong> regionslst) | 209 | public void SendCloseChildAgentConnections(UUID agentID, List<ulong> regionslst) |
211 | { | 210 | { |
212 | foreach (ulong handle in regionslst) | 211 | foreach (ulong handle in regionslst) |
213 | { | 212 | { |
214 | SendCloseChildAgent(agentID, handle); | 213 | SendCloseChildAgentDelegate d = SendCloseChildAgentAsync; |
214 | d.BeginInvoke(agentID, handle, | ||
215 | SendCloseChildAgentCompleted, | ||
216 | d); | ||
215 | } | 217 | } |
216 | } | 218 | } |
217 | 219 | ||
218 | public List<GridRegion> RequestNamedRegions(string name, int maxNumber) | 220 | public List<GridRegion> RequestNamedRegions(string name, int maxNumber) |
219 | { | 221 | { |
220 | return m_scene.GridService.GetRegionsByName(UUID.Zero, name, maxNumber); | 222 | return m_scene.GridService.GetRegionsByName(UUID.Zero, name, maxNumber); |
221 | } | 223 | } |
222 | } | 224 | } |
223 | } \ No newline at end of file | 225 | } |