aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs')
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs118
1 files changed, 50 insertions, 68 deletions
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
index 8076fab..2f61538 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
@@ -51,51 +51,21 @@ namespace OpenSim.Services.Connectors.SimianGrid
51 /// Connects region registration and neighbor lookups to the SimianGrid 51 /// Connects region registration and neighbor lookups to the SimianGrid
52 /// backend 52 /// backend
53 /// </summary> 53 /// </summary>
54 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] 54 public class SimianGridServiceConnector : IGridService
55 public class SimianGridServiceConnector : IGridService, ISharedRegionModule
56 { 55 {
57 private static readonly ILog m_log = 56 private static readonly ILog m_log =
58 LogManager.GetLogger( 57 LogManager.GetLogger(
59 MethodBase.GetCurrentMethod().DeclaringType); 58 MethodBase.GetCurrentMethod().DeclaringType);
60 59
61 private string m_serverUrl = String.Empty; 60 private string m_ServerURI = String.Empty;
62 private Dictionary<UUID, Scene> m_scenes = new Dictionary<UUID, Scene>();
63 private bool m_Enabled = false; 61 private bool m_Enabled = false;
64 62
65 #region ISharedRegionModule
66
67 public Type ReplaceableInterface { get { return null; } }
68 public void RegionLoaded(Scene scene) { }
69 public void PostInitialise() { }
70 public void Close() { }
71
72 public SimianGridServiceConnector() { } 63 public SimianGridServiceConnector() { }
73 public string Name { get { return "SimianGridServiceConnector"; } } 64 public SimianGridServiceConnector(string serverURI)
74 public void AddRegion(Scene scene)
75 {
76 if (!m_Enabled)
77 return;
78
79 // Every shared region module has to maintain an indepedent list of
80 // currently running regions
81 lock (m_scenes)
82 m_scenes[scene.RegionInfo.RegionID] = scene;
83
84 scene.RegisterModuleInterface<IGridService>(this);
85 }
86 public void RemoveRegion(Scene scene)
87 { 65 {
88 if (!m_Enabled) 66 m_ServerURI = serverURI.TrimEnd('/');
89 return;
90
91 lock (m_scenes)
92 m_scenes.Remove(scene.RegionInfo.RegionID);
93
94 scene.UnregisterModuleInterface<IGridService>(this);
95 } 67 }
96 68
97 #endregion ISharedRegionModule
98
99 public SimianGridServiceConnector(IConfigSource source) 69 public SimianGridServiceConnector(IConfigSource source)
100 { 70 {
101 CommonInit(source); 71 CommonInit(source);
@@ -103,32 +73,29 @@ namespace OpenSim.Services.Connectors.SimianGrid
103 73
104 public void Initialise(IConfigSource source) 74 public void Initialise(IConfigSource source)
105 { 75 {
106 IConfig moduleConfig = source.Configs["Modules"]; 76 CommonInit(source);
107 if (moduleConfig != null)
108 {
109 string name = moduleConfig.GetString("GridServices", "");
110 if (name == Name)
111 CommonInit(source);
112 }
113 } 77 }
114 78
115 private void CommonInit(IConfigSource source) 79 private void CommonInit(IConfigSource source)
116 { 80 {
117 IConfig gridConfig = source.Configs["GridService"]; 81 IConfig gridConfig = source.Configs["GridService"];
118 if (gridConfig != null) 82 if (gridConfig == null)
119 { 83 {
120 string serviceUrl = gridConfig.GetString("GridServerURI"); 84 m_log.Error("[SIMIAN GRID CONNECTOR]: GridService missing from OpenSim.ini");
121 if (!String.IsNullOrEmpty(serviceUrl)) 85 throw new Exception("Grid connector init error");
122 {
123 if (!serviceUrl.EndsWith("/") && !serviceUrl.EndsWith("="))
124 serviceUrl = serviceUrl + '/';
125 m_serverUrl = serviceUrl;
126 m_Enabled = true;
127 }
128 } 86 }
129 87
130 if (String.IsNullOrEmpty(m_serverUrl)) 88 string serviceUrl = gridConfig.GetString("GridServerURI");
131 m_log.Info("[SIMIAN GRID CONNECTOR]: No GridServerURI specified, disabling connector"); 89 if (String.IsNullOrEmpty(serviceUrl))
90 {
91 m_log.Error("[SIMIAN GRID CONNECTOR]: No Server URI named in section GridService");
92 throw new Exception("Grid connector init error");
93 }
94
95 if (!serviceUrl.EndsWith("/") && !serviceUrl.EndsWith("="))
96 serviceUrl = serviceUrl + '/';
97 m_ServerURI = serviceUrl;
98 m_Enabled = true;
132 } 99 }
133 100
134 #region IGridService 101 #region IGridService
@@ -136,11 +103,11 @@ namespace OpenSim.Services.Connectors.SimianGrid
136 public string RegisterRegion(UUID scopeID, GridRegion regionInfo) 103 public string RegisterRegion(UUID scopeID, GridRegion regionInfo)
137 { 104 {
138 // Generate and upload our map tile in PNG format to the SimianGrid AddMapTile service 105 // Generate and upload our map tile in PNG format to the SimianGrid AddMapTile service
139 Scene scene; 106// Scene scene;
140 if (m_scenes.TryGetValue(regionInfo.RegionID, out scene)) 107// if (m_scenes.TryGetValue(regionInfo.RegionID, out scene))
141 UploadMapTile(scene); 108// UploadMapTile(scene);
142 else 109// else
143 m_log.Warn("Registering region " + regionInfo.RegionName + " (" + regionInfo.RegionID + ") that we are not tracking"); 110// m_log.Warn("Registering region " + regionInfo.RegionName + " (" + regionInfo.RegionID + ") that we are not tracking");
144 111
145 Vector3d minPosition = new Vector3d(regionInfo.RegionLocX, regionInfo.RegionLocY, 0.0); 112 Vector3d minPosition = new Vector3d(regionInfo.RegionLocX, regionInfo.RegionLocY, 0.0);
146 Vector3d maxPosition = minPosition + new Vector3d(Constants.RegionSize, Constants.RegionSize, 4096.0); 113 Vector3d maxPosition = minPosition + new Vector3d(Constants.RegionSize, Constants.RegionSize, 4096.0);
@@ -171,7 +138,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
171 { "ExtraData", OSDParser.SerializeJsonString(extraData) } 138 { "ExtraData", OSDParser.SerializeJsonString(extraData) }
172 }; 139 };
173 140
174 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 141 OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
175 if (response["Success"].AsBoolean()) 142 if (response["Success"].AsBoolean())
176 return String.Empty; 143 return String.Empty;
177 else 144 else
@@ -187,7 +154,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
187 { "Enabled", "0" } 154 { "Enabled", "0" }
188 }; 155 };
189 156
190 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 157 OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
191 bool success = response["Success"].AsBoolean(); 158 bool success = response["Success"].AsBoolean();
192 159
193 if (!success) 160 if (!success)
@@ -232,9 +199,12 @@ namespace OpenSim.Services.Connectors.SimianGrid
232 { "SceneID", regionID.ToString() } 199 { "SceneID", regionID.ToString() }
233 }; 200 };
234 201
235 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 202 // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request region with uuid {0}",regionID.ToString());
203
204 OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
236 if (response["Success"].AsBoolean()) 205 if (response["Success"].AsBoolean())
237 { 206 {
207 // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] uuid request successful {0}",response["Name"].AsString());
238 return ResponseToGridRegion(response); 208 return ResponseToGridRegion(response);
239 } 209 }
240 else 210 else
@@ -257,15 +227,18 @@ namespace OpenSim.Services.Connectors.SimianGrid
257 { "Enabled", "1" } 227 { "Enabled", "1" }
258 }; 228 };
259 229
260 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 230 // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request grid at {0}",position.ToString());
231
232 OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
261 if (response["Success"].AsBoolean()) 233 if (response["Success"].AsBoolean())
262 { 234 {
235 // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] position request successful {0}",response["Name"].AsString());
263 return ResponseToGridRegion(response); 236 return ResponseToGridRegion(response);
264 } 237 }
265 else 238 else
266 { 239 {
267 //m_log.InfoFormat("[SIMIAN GRID CONNECTOR]: Grid service did not find a match for region at {0},{1}", 240 // m_log.InfoFormat("[SIMIAN GRID CONNECTOR]: Grid service did not find a match for region at {0},{1}",
268 // x / Constants.RegionSize, y / Constants.RegionSize); 241 // x / Constants.RegionSize, y / Constants.RegionSize);
269 return null; 242 return null;
270 } 243 }
271 } 244 }
@@ -295,9 +268,13 @@ namespace OpenSim.Services.Connectors.SimianGrid
295 if (maxNumber > 0) 268 if (maxNumber > 0)
296 requestArgs["MaxNumber"] = maxNumber.ToString(); 269 requestArgs["MaxNumber"] = maxNumber.ToString();
297 270
298 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 271 // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request regions with name {0}",name);
272
273 OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
299 if (response["Success"].AsBoolean()) 274 if (response["Success"].AsBoolean())
300 { 275 {
276 // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] found regions with name {0}",name);
277
301 OSDArray array = response["Scenes"] as OSDArray; 278 OSDArray array = response["Scenes"] as OSDArray;
302 if (array != null) 279 if (array != null)
303 { 280 {
@@ -328,7 +305,10 @@ namespace OpenSim.Services.Connectors.SimianGrid
328 { "Enabled", "1" } 305 { "Enabled", "1" }
329 }; 306 };
330 307
331 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 308 m_log.WarnFormat("[SIMIAN GRID CONNECTOR] request regions by range {0} to {1}",minPosition.ToString(),maxPosition.ToString());
309
310
311 OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
332 if (response["Success"].AsBoolean()) 312 if (response["Success"].AsBoolean())
333 { 313 {
334 OSDArray array = response["Scenes"] as OSDArray; 314 OSDArray array = response["Scenes"] as OSDArray;
@@ -384,7 +364,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
384 { "SceneID", regionID.ToString() } 364 { "SceneID", regionID.ToString() }
385 }; 365 };
386 366
387 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 367 // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request region flags for {0}",regionID.ToString());
368
369 OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
388 if (response["Success"].AsBoolean()) 370 if (response["Success"].AsBoolean())
389 { 371 {
390 return response["Enabled"].AsBoolean() ? REGION_ONLINE : 0; 372 return response["Enabled"].AsBoolean() ? REGION_ONLINE : 0;
@@ -430,7 +412,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
430 // Make the remote storage request 412 // Make the remote storage request
431 try 413 try
432 { 414 {
433 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(m_serverUrl); 415 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(m_ServerURI);
434 416
435 HttpWebResponse response = MultipartForm.Post(request, postParameters); 417 HttpWebResponse response = MultipartForm.Post(request, postParameters);
436 using (Stream responseStream = response.GetResponseStream()) 418 using (Stream responseStream = response.GetResponseStream())
@@ -486,7 +468,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
486 if (onlyEnabled) 468 if (onlyEnabled)
487 requestArgs["Enabled"] = "1"; 469 requestArgs["Enabled"] = "1";
488 470
489 OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); 471 OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
490 if (response["Success"].AsBoolean()) 472 if (response["Success"].AsBoolean())
491 { 473 {
492 return ResponseToGridRegion(response); 474 return ResponseToGridRegion(response);