aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/ServiceConnectorsOut
diff options
context:
space:
mode:
authorMelanie2012-05-27 19:24:30 +0100
committerMelanie2012-05-27 19:24:30 +0100
commit884c0e7bb10bd2c2a951901c6f1dd56a86ef6b9f (patch)
treedd692a54213f86fd64bd29c6662584df85088193 /OpenSim/Region/CoreModules/ServiceConnectorsOut
parentMerge branch 'master' into careminster (diff)
parentminor: code formatting from 0b72f773 (diff)
downloadopensim-SC_OLD-884c0e7bb10bd2c2a951901c6f1dd56a86ef6b9f.zip
opensim-SC_OLD-884c0e7bb10bd2c2a951901c6f1dd56a86ef6b9f.tar.gz
opensim-SC_OLD-884c0e7bb10bd2c2a951901c6f1dd56a86ef6b9f.tar.bz2
opensim-SC_OLD-884c0e7bb10bd2c2a951901c6f1dd56a86ef6b9f.tar.xz
Merge branch 'master' into careminster
Conflicts: OpenSim/Data/MySQL/MySQLSimulationData.cs OpenSim/Data/MySQL/Resources/RegionStore.migrations OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs OpenSim/Region/Framework/Scenes/Scene.cs OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
Diffstat (limited to 'OpenSim/Region/CoreModules/ServiceConnectorsOut')
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs2
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs211
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs7
3 files changed, 109 insertions, 111 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs
index 8395f83..008465f 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs
@@ -149,7 +149,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
149 149
150 m_aScene = scene; 150 m_aScene = scene;
151 151
152 scene.RegisterModuleInterface<IAssetService>(this); 152 m_aScene.RegisterModuleInterface<IAssetService>(this);
153 } 153 }
154 154
155 public void RemoveRegion(Scene scene) 155 public void RemoveRegion(Scene scene)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
index de089f3..008992e 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
@@ -26,6 +26,7 @@
26 */ 26 */
27using System; 27using System;
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Linq;
29using System.Reflection; 30using System.Reflection;
30using log4net; 31using log4net;
31using Nini.Config; 32using Nini.Config;
@@ -41,22 +42,20 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
41 public class LocalSimulationConnectorModule : ISharedRegionModule, ISimulationService 42 public class LocalSimulationConnectorModule : ISharedRegionModule, ISimulationService
42 { 43 {
43 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 44 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
44 // Version of this service
45 private const string m_Version = "SIMULATION/0.1";
46 45
47 private List<Scene> m_sceneList = new List<Scene>(); 46 /// <summary>
47 /// Version of this service
48 /// </summary>
49 private const string m_Version = "SIMULATION/0.1";
48 50
49 private IEntityTransferModule m_AgentTransferModule; 51 /// <summary>
50 protected IEntityTransferModule AgentTransferModule 52 /// Map region ID to scene.
51 { 53 /// </summary>
52 get 54 private Dictionary<UUID, Scene> m_scenes = new Dictionary<UUID, Scene>();
53 {
54 if (m_AgentTransferModule == null)
55 m_AgentTransferModule = m_sceneList[0].RequestModuleInterface<IEntityTransferModule>();
56 return m_AgentTransferModule;
57 }
58 }
59 55
56 /// <summary>
57 /// Is this module enabled?
58 /// </summary>
60 private bool m_ModuleEnabled = false; 59 private bool m_ModuleEnabled = false;
61 60
62 #region IRegionModule 61 #region IRegionModule
@@ -129,12 +128,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
129 /// <param name="scene"></param> 128 /// <param name="scene"></param>
130 public void RemoveScene(Scene scene) 129 public void RemoveScene(Scene scene)
131 { 130 {
132 lock (m_sceneList) 131 lock (m_scenes)
133 { 132 {
134 if (m_sceneList.Contains(scene)) 133 if (m_scenes.ContainsKey(scene.RegionInfo.RegionID))
135 { 134 m_scenes.Remove(scene.RegionInfo.RegionID);
136 m_sceneList.Remove(scene); 135 else
137 } 136 m_log.WarnFormat(
137 "[LOCAL SIMULATION CONNECTOR]: Tried to remove region {0} but it was not present",
138 scene.RegionInfo.RegionName);
138 } 139 }
139 } 140 }
140 141
@@ -144,13 +145,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
144 /// <param name="scene"></param> 145 /// <param name="scene"></param>
145 public void Init(Scene scene) 146 public void Init(Scene scene)
146 { 147 {
147 if (!m_sceneList.Contains(scene)) 148 lock (m_scenes)
148 { 149 {
149 lock (m_sceneList) 150 if (!m_scenes.ContainsKey(scene.RegionInfo.RegionID))
150 { 151 m_scenes[scene.RegionInfo.RegionID] = scene;
151 m_sceneList.Add(scene); 152 else
152 } 153 m_log.WarnFormat(
153 154 "[LOCAL SIMULATION CONNECTOR]: Tried to add region {0} but it is already present",
155 scene.RegionInfo.RegionName);
154 } 156 }
155 } 157 }
156 158
@@ -158,15 +160,24 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
158 160
159 #region ISimulation 161 #region ISimulation
160 162
161 public IScene GetScene(ulong regionhandle) 163 public IScene GetScene(UUID regionId)
162 { 164 {
163 foreach (Scene s in m_sceneList) 165 if (m_scenes.ContainsKey(regionId))
164 { 166 {
165 if (s.RegionInfo.RegionHandle == regionhandle) 167 return m_scenes[regionId];
166 return s; 168 }
169 else
170 {
171 // FIXME: This was pre-existing behaviour but possibly not a good idea, since it hides an error rather
172 // than making it obvious and fixable. Need to see if the error message comes up in practice.
173 Scene s = m_scenes.Values.ToArray()[0];
174
175 m_log.ErrorFormat(
176 "[LOCAL SIMULATION CONNECTOR]: Region with id {0} not found. Returning {1} {2} instead",
177 regionId, s.RegionInfo.RegionName, s.RegionInfo.RegionID);
178
179 return s;
167 } 180 }
168 // ? weird. should not happen
169 return m_sceneList[0];
170 } 181 }
171 182
172 public ISimulationService GetInnerService() 183 public ISimulationService GetInnerService()
@@ -187,13 +198,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
187 return false; 198 return false;
188 } 199 }
189 200
190 foreach (Scene s in m_sceneList) 201 if (m_scenes.ContainsKey(destination.RegionID))
191 { 202 {
192 if (s.RegionInfo.RegionHandle == destination.RegionHandle)
193 {
194// m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Found region {0} to send SendCreateChildAgent", destination.RegionName); 203// m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Found region {0} to send SendCreateChildAgent", destination.RegionName);
195 return s.NewUserConnection(aCircuit, teleportFlags, out reason); 204 return m_scenes[destination.RegionID].NewUserConnection(aCircuit, teleportFlags, out reason);
196 }
197 } 205 }
198 206
199 reason = "Did not find region " + destination.RegionName; 207 reason = "Did not find region " + destination.RegionName;
@@ -205,17 +213,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
205 if (destination == null) 213 if (destination == null)
206 return false; 214 return false;
207 215
208 foreach (Scene s in m_sceneList) 216 if (m_scenes.ContainsKey(destination.RegionID))
209 { 217 {
210 if (s.RegionInfo.RegionHandle == destination.RegionHandle)
211 {
212// m_log.DebugFormat( 218// m_log.DebugFormat(
213// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate", 219// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate",
214// s.RegionInfo.RegionName, destination.RegionHandle); 220// s.RegionInfo.RegionName, destination.RegionHandle);
215 221
216 s.IncomingChildAgentDataUpdate(cAgentData); 222 return m_scenes[destination.RegionID].IncomingChildAgentDataUpdate(cAgentData);
217 return true;
218 }
219 } 223 }
220 224
221// m_log.DebugFormat("[LOCAL COMMS]: Did not find region {0} for ChildAgentUpdate", regionHandle); 225// m_log.DebugFormat("[LOCAL COMMS]: Did not find region {0} for ChildAgentUpdate", regionHandle);
@@ -231,11 +235,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
231 // simulator so when we receive the update we need to hand it to each of the 235 // simulator so when we receive the update we need to hand it to each of the
232 // scenes; scenes each check to see if the is a scene presence for the avatar 236 // scenes; scenes each check to see if the is a scene presence for the avatar
233 // note that we really don't need the GridRegion for this call 237 // note that we really don't need the GridRegion for this call
234 foreach (Scene s in m_sceneList) 238 foreach (Scene s in m_scenes.Values)
235 { 239 {
236 //m_log.Debug("[LOCAL COMMS]: Found region to send ChildAgentUpdate"); 240 //m_log.Debug("[LOCAL COMMS]: Found region to send ChildAgentUpdate");
237 s.IncomingChildAgentDataUpdate(cAgentData); 241 s.IncomingChildAgentDataUpdate(cAgentData);
238 } 242 }
243
239 //m_log.Debug("[LOCAL COMMS]: region not found for ChildAgentUpdate"); 244 //m_log.Debug("[LOCAL COMMS]: region not found for ChildAgentUpdate");
240 return true; 245 return true;
241 } 246 }
@@ -247,14 +252,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
247 if (destination == null) 252 if (destination == null)
248 return false; 253 return false;
249 254
250 foreach (Scene s in m_sceneList) 255 if (m_scenes.ContainsKey(destination.RegionID))
251 { 256 {
252 if (s.RegionInfo.RegionHandle == destination.RegionHandle) 257// m_log.DebugFormat(
253 { 258// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate",
254 //m_log.Debug("[LOCAL COMMS]: Found region to send ChildAgentUpdate"); 259// s.RegionInfo.RegionName, destination.RegionHandle);
255 return s.IncomingRetrieveRootAgent(id, out agent); 260
256 } 261 return m_scenes[destination.RegionID].IncomingRetrieveRootAgent(id, out agent);
257 } 262 }
263
258 //m_log.Debug("[LOCAL COMMS]: region not found for ChildAgentUpdate"); 264 //m_log.Debug("[LOCAL COMMS]: region not found for ChildAgentUpdate");
259 return false; 265 return false;
260 } 266 }
@@ -266,59 +272,49 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
266 if (destination == null) 272 if (destination == null)
267 return false; 273 return false;
268 274
269 foreach (Scene s in m_sceneList) 275 if (m_scenes.ContainsKey(destination.RegionID))
270 { 276 {
271 if (s.RegionInfo.RegionID == destination.RegionID) 277// m_log.DebugFormat(
272 return s.QueryAccess(id, position, out reason); 278// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate",
279// s.RegionInfo.RegionName, destination.RegionHandle);
280
281 return m_scenes[destination.RegionID].QueryAccess(id, position, out reason);
273 } 282 }
283
284 //m_log.Debug("[LOCAL COMMS]: region not found for QueryAccess");
274 return false; 285 return false;
275 } 286 }
276 287
277 public bool ReleaseAgent(UUID origin, UUID id, string uri) 288 public bool ReleaseAgent(UUID originId, UUID agentId, string uri)
278 { 289 {
279 foreach (Scene s in m_sceneList) 290 if (m_scenes.ContainsKey(originId))
280 { 291 {
281 if (s.RegionInfo.RegionID == origin) 292// m_log.DebugFormat(
282 { 293// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate",
283// m_log.Debug("[LOCAL COMMS]: Found region to SendReleaseAgent"); 294// s.RegionInfo.RegionName, destination.RegionHandle);
284 AgentTransferModule.AgentArrivedAtDestination(id); 295
285 return true; 296 m_scenes[originId].EntityTransferModule.AgentArrivedAtDestination(agentId);
286// return s.IncomingReleaseAgent(id); 297 return true;
287 }
288 } 298 }
299
289 //m_log.Debug("[LOCAL COMMS]: region not found in SendReleaseAgent " + origin); 300 //m_log.Debug("[LOCAL COMMS]: region not found in SendReleaseAgent " + origin);
290 return false; 301 return false;
291 } 302 }
292 303
293 public bool CloseAgent(GridRegion destination, UUID id) 304 public bool CloseChildAgent(GridRegion destination, UUID id)
294 { 305 {
295 if (destination == null) 306 return CloseAgent(destination, id);
296 return false;
297
298 foreach (Scene s in m_sceneList)
299 {
300 if (s.RegionInfo.RegionID == destination.RegionID)
301 {
302 //m_log.Debug("[LOCAL COMMS]: Found region to SendCloseAgent");
303 return s.IncomingCloseAgent(id);
304 }
305 }
306 //m_log.Debug("[LOCAL COMMS]: region not found in SendCloseAgent");
307 return false;
308 } 307 }
309 308
310 public bool CloseChildAgent(GridRegion destination, UUID id) 309 public bool CloseAgent(GridRegion destination, UUID id)
311 { 310 {
312 if (destination == null) 311 if (destination == null)
313 return false; 312 return false;
314 313
315 foreach (Scene s in m_sceneList) 314 if (m_scenes.ContainsKey(destination.RegionID))
316 { 315 {
317 if (s.RegionInfo.RegionID == destination.RegionID) 316 Util.FireAndForget(delegate { m_scenes[destination.RegionID].IncomingCloseAgent(id); });
318 { 317 return true;
319 //m_log.Debug("[LOCAL COMMS]: Found region to SendCloseAgent");
320 return s.IncomingCloseChildAgent(id);
321 }
322 } 318 }
323 //m_log.Debug("[LOCAL COMMS]: region not found in SendCloseAgent"); 319 //m_log.Debug("[LOCAL COMMS]: region not found in SendCloseAgent");
324 return false; 320 return false;
@@ -333,25 +329,28 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
333 if (destination == null) 329 if (destination == null)
334 return false; 330 return false;
335 331
336 foreach (Scene s in m_sceneList) 332 if (m_scenes.ContainsKey(destination.RegionID))
337 { 333 {
338 if (s.RegionInfo.RegionHandle == destination.RegionHandle) 334// m_log.DebugFormat(
335// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate",
336// s.RegionInfo.RegionName, destination.RegionHandle);
337
338 Scene s = m_scenes[destination.RegionID];
339
340 if (isLocalCall)
339 { 341 {
340 //m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject"); 342 // We need to make a local copy of the object
341 if (isLocalCall) 343 ISceneObject sogClone = sog.CloneForNewScene();
342 { 344 sogClone.SetState(sog.GetStateSnapshot(), s);
343 // We need to make a local copy of the object 345 return s.IncomingCreateObject(newPosition, sogClone);
344 ISceneObject sogClone = sog.CloneForNewScene(); 346 }
345 sogClone.SetState(sog.GetStateSnapshot(), s); 347 else
346 return s.IncomingCreateObject(newPosition, sogClone); 348 {
347 } 349 // Use the object as it came through the wire
348 else 350 return s.IncomingCreateObject(newPosition, sog);
349 {
350 // Use the object as it came through the wire
351 return s.IncomingCreateObject(newPosition, sog);
352 }
353 } 351 }
354 } 352 }
353
355 return false; 354 return false;
356 } 355 }
357 356
@@ -360,13 +359,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
360 if (destination == null) 359 if (destination == null)
361 return false; 360 return false;
362 361
363 foreach (Scene s in m_sceneList) 362 if (m_scenes.ContainsKey(destination.RegionID))
364 { 363 {
365 if (s.RegionInfo.RegionHandle == destination.RegionHandle) 364// m_log.DebugFormat(
366 { 365// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate",
367 return s.IncomingCreateObject(userID, itemID); 366// s.RegionInfo.RegionName, destination.RegionHandle);
368 } 367
368 return m_scenes[destination.RegionID].IncomingCreateObject(userID, itemID);
369 } 369 }
370
370 return false; 371 return false;
371 } 372 }
372 373
@@ -377,18 +378,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
377 378
378 public bool IsLocalRegion(ulong regionhandle) 379 public bool IsLocalRegion(ulong regionhandle)
379 { 380 {
380 foreach (Scene s in m_sceneList) 381 foreach (Scene s in m_scenes.Values)
381 if (s.RegionInfo.RegionHandle == regionhandle) 382 if (s.RegionInfo.RegionHandle == regionhandle)
382 return true; 383 return true;
384
383 return false; 385 return false;
384 } 386 }
385 387
386 public bool IsLocalRegion(UUID id) 388 public bool IsLocalRegion(UUID id)
387 { 389 {
388 foreach (Scene s in m_sceneList) 390 return m_scenes.ContainsKey(id);
389 if (s.RegionInfo.RegionID == id)
390 return true;
391 return false;
392 } 391 }
393 392
394 #endregion 393 #endregion
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs
index 4b70692..d395413 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs
@@ -151,9 +151,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
151 151
152 #region IInterregionComms 152 #region IInterregionComms
153 153
154 public IScene GetScene(ulong handle) 154 public IScene GetScene(UUID regionId)
155 { 155 {
156 return m_localBackend.GetScene(handle); 156 return m_localBackend.GetScene(regionId);
157 } 157 }
158 158
159 public ISimulationService GetInnerService() 159 public ISimulationService GetInnerService()
@@ -226,13 +226,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
226 return m_remoteConnector.RetrieveAgent(destination, id, out agent); 226 return m_remoteConnector.RetrieveAgent(destination, id, out agent);
227 227
228 return false; 228 return false;
229
230 } 229 }
231 230
232 public bool QueryAccess(GridRegion destination, UUID id, Vector3 position, out string version, out string reason) 231 public bool QueryAccess(GridRegion destination, UUID id, Vector3 position, out string version, out string reason)
233 { 232 {
234 reason = "Communications failure"; 233 reason = "Communications failure";
235 version = "Unknown"; 234 version = "Unknown";
235
236 if (destination == null) 236 if (destination == null)
237 return false; 237 return false;
238 238
@@ -245,7 +245,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
245 return m_remoteConnector.QueryAccess(destination, id, position, out version, out reason); 245 return m_remoteConnector.QueryAccess(destination, id, position, out version, out reason);
246 246
247 return false; 247 return false;
248
249 } 248 }
250 249
251 public bool ReleaseAgent(UUID origin, UUID id, string uri) 250 public bool ReleaseAgent(UUID origin, UUID id, string uri)