diff options
Diffstat (limited to 'OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs')
-rw-r--r-- | OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs | 212 |
1 files changed, 95 insertions, 117 deletions
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs index 854bea4..211b775 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs | |||
@@ -65,7 +65,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
65 | public void PostInitialise() { } | 65 | public void PostInitialise() { } |
66 | public void Close() { } | 66 | public void Close() { } |
67 | 67 | ||
68 | public SimianPresenceServiceConnector() { m_activityDetector = new SimianActivityDetector(this); } | 68 | public SimianPresenceServiceConnector() { } |
69 | public string Name { get { return "SimianPresenceServiceConnector"; } } | 69 | public string Name { get { return "SimianPresenceServiceConnector"; } } |
70 | public void AddRegion(Scene scene) | 70 | public void AddRegion(Scene scene) |
71 | { | 71 | { |
@@ -121,6 +121,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
121 | if (!serviceUrl.EndsWith("/") && !serviceUrl.EndsWith("=")) | 121 | if (!serviceUrl.EndsWith("/") && !serviceUrl.EndsWith("=")) |
122 | serviceUrl = serviceUrl + '/'; | 122 | serviceUrl = serviceUrl + '/'; |
123 | m_serverUrl = serviceUrl; | 123 | m_serverUrl = serviceUrl; |
124 | m_activityDetector = new SimianActivityDetector(this); | ||
124 | m_Enabled = true; | 125 | m_Enabled = true; |
125 | } | 126 | } |
126 | } | 127 | } |
@@ -137,17 +138,18 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
137 | userID, sessionID, secureSessionID); | 138 | userID, sessionID, secureSessionID); |
138 | 139 | ||
139 | NameValueCollection requestArgs = new NameValueCollection | 140 | NameValueCollection requestArgs = new NameValueCollection |
140 | { | 141 | { |
141 | { "RequestMethod", "AddSession" }, | 142 | { "RequestMethod", "AddSession" }, |
142 | { "UserID", userID.ToString() } | 143 | { "UserID", userID.ToString() } |
143 | }; | 144 | }; |
145 | |||
144 | if (sessionID != UUID.Zero) | 146 | if (sessionID != UUID.Zero) |
145 | { | 147 | { |
146 | requestArgs["SessionID"] = sessionID.ToString(); | 148 | requestArgs["SessionID"] = sessionID.ToString(); |
147 | requestArgs["SecureSessionID"] = secureSessionID.ToString(); | 149 | requestArgs["SecureSessionID"] = secureSessionID.ToString(); |
148 | } | 150 | } |
149 | 151 | ||
150 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 152 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
151 | bool success = response["Success"].AsBoolean(); | 153 | bool success = response["Success"].AsBoolean(); |
152 | 154 | ||
153 | if (!success) | 155 | if (!success) |
@@ -158,15 +160,15 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
158 | 160 | ||
159 | public bool LogoutAgent(UUID sessionID) | 161 | public bool LogoutAgent(UUID sessionID) |
160 | { | 162 | { |
161 | // m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for agent with sessionID " + sessionID); | 163 | // m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for agent with sessionID " + sessionID); |
162 | 164 | ||
163 | NameValueCollection requestArgs = new NameValueCollection | 165 | NameValueCollection requestArgs = new NameValueCollection |
164 | { | 166 | { |
165 | { "RequestMethod", "RemoveSession" }, | 167 | { "RequestMethod", "RemoveSession" }, |
166 | { "SessionID", sessionID.ToString() } | 168 | { "SessionID", sessionID.ToString() } |
167 | }; | 169 | }; |
168 | 170 | ||
169 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 171 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
170 | bool success = response["Success"].AsBoolean(); | 172 | bool success = response["Success"].AsBoolean(); |
171 | 173 | ||
172 | if (!success) | 174 | if (!success) |
@@ -177,15 +179,15 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
177 | 179 | ||
178 | public bool LogoutRegionAgents(UUID regionID) | 180 | public bool LogoutRegionAgents(UUID regionID) |
179 | { | 181 | { |
180 | // m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for all agents in region " + regionID); | 182 | // m_log.InfoFormat("[SIMIAN PRESENCE CONNECTOR]: Logout requested for all agents in region " + regionID); |
181 | 183 | ||
182 | NameValueCollection requestArgs = new NameValueCollection | 184 | NameValueCollection requestArgs = new NameValueCollection |
183 | { | 185 | { |
184 | { "RequestMethod", "RemoveSessions" }, | 186 | { "RequestMethod", "RemoveSessions" }, |
185 | { "SceneID", regionID.ToString() } | 187 | { "SceneID", regionID.ToString() } |
186 | }; | 188 | }; |
187 | 189 | ||
188 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 190 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
189 | bool success = response["Success"].AsBoolean(); | 191 | bool success = response["Success"].AsBoolean(); |
190 | 192 | ||
191 | if (!success) | 193 | if (!success) |
@@ -202,49 +204,46 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
202 | 204 | ||
203 | public PresenceInfo GetAgent(UUID sessionID) | 205 | public PresenceInfo GetAgent(UUID sessionID) |
204 | { | 206 | { |
205 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent with sessionID " + sessionID); | 207 | OSDMap sessionResponse = GetSessionDataFromSessionID(sessionID); |
206 | 208 | if (sessionResponse == null) | |
207 | NameValueCollection requestArgs = new NameValueCollection | ||
208 | { | ||
209 | { "RequestMethod", "GetSession" }, | ||
210 | { "SessionID", sessionID.ToString() } | ||
211 | }; | ||
212 | |||
213 | OSDMap sessionResponse = WebUtil.PostToService(m_serverUrl, requestArgs); | ||
214 | if (sessionResponse["Success"].AsBoolean()) | ||
215 | { | 209 | { |
216 | UUID userID = sessionResponse["UserID"].AsUUID(); | 210 | m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session {0}: {1}",sessionID.ToString(),sessionResponse["Message"].AsString()); |
217 | m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID); | 211 | return null; |
218 | |||
219 | requestArgs = new NameValueCollection | ||
220 | { | ||
221 | { "RequestMethod", "GetUser" }, | ||
222 | { "UserID", userID.ToString() } | ||
223 | }; | ||
224 | |||
225 | OSDMap userResponse = WebUtil.PostToService(m_serverUrl, requestArgs); | ||
226 | if (userResponse["Success"].AsBoolean()) | ||
227 | return ResponseToPresenceInfo(sessionResponse, userResponse); | ||
228 | else | ||
229 | m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for " + userID + ": " + userResponse["Message"].AsString()); | ||
230 | } | 212 | } |
231 | else | 213 | |
214 | UUID userID = sessionResponse["UserID"].AsUUID(); | ||
215 | OSDMap userResponse = GetUserData(userID); | ||
216 | if (userResponse == null) | ||
232 | { | 217 | { |
233 | m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session " + sessionID + ": " + sessionResponse["Message"].AsString()); | 218 | m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for {0}: {1}",userID.ToString(),userResponse["Message"].AsString()); |
219 | return null; | ||
234 | } | 220 | } |
235 | 221 | ||
236 | return null; | 222 | return ResponseToPresenceInfo(sessionResponse); |
237 | } | 223 | } |
238 | 224 | ||
239 | public PresenceInfo[] GetAgents(string[] userIDs) | 225 | public PresenceInfo[] GetAgents(string[] userIDs) |
240 | { | 226 | { |
241 | List<PresenceInfo> presences = new List<PresenceInfo>(userIDs.Length); | 227 | List<PresenceInfo> presences = new List<PresenceInfo>(); |
228 | |||
229 | NameValueCollection requestArgs = new NameValueCollection | ||
230 | { | ||
231 | { "RequestMethod", "GetSessions" }, | ||
232 | { "UserIDList", String.Join(",",userIDs) } | ||
233 | }; | ||
242 | 234 | ||
243 | for (int i = 0; i < userIDs.Length; i++) | 235 | OSDMap sessionListResponse = SimianGrid.PostToService(m_serverUrl, requestArgs); |
236 | if (! sessionListResponse["Success"].AsBoolean()) | ||
244 | { | 237 | { |
245 | UUID userID; | 238 | m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve sessions: {0}",sessionListResponse["Message"].AsString()); |
246 | if (UUID.TryParse(userIDs[i], out userID) && userID != UUID.Zero) | 239 | return null; |
247 | presences.AddRange(GetSessions(userID)); | 240 | } |
241 | |||
242 | OSDArray sessionList = sessionListResponse["Sessions"] as OSDArray; | ||
243 | for (int i = 0; i < sessionList.Count; i++) | ||
244 | { | ||
245 | OSDMap sessionInfo = sessionList[i] as OSDMap; | ||
246 | presences.Add(ResponseToPresenceInfo(sessionInfo)); | ||
248 | } | 247 | } |
249 | 248 | ||
250 | return presences.ToArray(); | 249 | return presences.ToArray(); |
@@ -262,7 +261,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
262 | 261 | ||
263 | public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt) | 262 | public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt) |
264 | { | 263 | { |
265 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID); | 264 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID); |
266 | 265 | ||
267 | // Remove the session to mark this user offline | 266 | // Remove the session to mark this user offline |
268 | if (!LogoutAgent(sessionID)) | 267 | if (!LogoutAgent(sessionID)) |
@@ -270,13 +269,13 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
270 | 269 | ||
271 | // Save our last position as user data | 270 | // Save our last position as user data |
272 | NameValueCollection requestArgs = new NameValueCollection | 271 | NameValueCollection requestArgs = new NameValueCollection |
273 | { | 272 | { |
274 | { "RequestMethod", "AddUserData" }, | 273 | { "RequestMethod", "AddUserData" }, |
275 | { "UserID", userID.ToString() }, | 274 | { "UserID", userID.ToString() }, |
276 | { "LastLocation", SerializeLocation(regionID, lastPosition, lastLookAt) } | 275 | { "LastLocation", SerializeLocation(regionID, lastPosition, lastLookAt) } |
277 | }; | 276 | }; |
278 | 277 | ||
279 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 278 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
280 | bool success = response["Success"].AsBoolean(); | 279 | bool success = response["Success"].AsBoolean(); |
281 | 280 | ||
282 | if (!success) | 281 | if (!success) |
@@ -287,16 +286,16 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
287 | 286 | ||
288 | public bool SetHome(string userID, UUID regionID, Vector3 position, Vector3 lookAt) | 287 | public bool SetHome(string userID, UUID regionID, Vector3 position, Vector3 lookAt) |
289 | { | 288 | { |
290 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Setting home location for user " + userID); | 289 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Setting home location for user " + userID); |
291 | 290 | ||
292 | NameValueCollection requestArgs = new NameValueCollection | 291 | NameValueCollection requestArgs = new NameValueCollection |
293 | { | 292 | { |
294 | { "RequestMethod", "AddUserData" }, | 293 | { "RequestMethod", "AddUserData" }, |
295 | { "UserID", userID.ToString() }, | 294 | { "UserID", userID.ToString() }, |
296 | { "HomeLocation", SerializeLocation(regionID, position, lookAt) } | 295 | { "HomeLocation", SerializeLocation(regionID, position, lookAt) } |
297 | }; | 296 | }; |
298 | 297 | ||
299 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 298 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
300 | bool success = response["Success"].AsBoolean(); | 299 | bool success = response["Success"].AsBoolean(); |
301 | 300 | ||
302 | if (!success) | 301 | if (!success) |
@@ -312,24 +311,19 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
312 | 311 | ||
313 | public GridUserInfo GetGridUserInfo(string user) | 312 | public GridUserInfo GetGridUserInfo(string user) |
314 | { | 313 | { |
315 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent " + user); | 314 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent " + user); |
316 | 315 | ||
317 | UUID userID = new UUID(user); | 316 | UUID userID = new UUID(user); |
318 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID); | 317 | OSDMap userResponse = GetUserData(userID); |
319 | 318 | ||
320 | NameValueCollection requestArgs = new NameValueCollection | 319 | if (userResponse == null) |
321 | { | 320 | { |
322 | { "RequestMethod", "GetUser" }, | 321 | m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for {0}", userID); |
323 | { "UserID", userID.ToString() } | 322 | } |
324 | }; | ||
325 | 323 | ||
326 | OSDMap userResponse = WebUtil.PostToService(m_serverUrl, requestArgs); | 324 | // Note that ResponseToGridUserInfo properly checks for and returns a null if passed a null. |
327 | if (userResponse["Success"].AsBoolean()) | 325 | return ResponseToGridUserInfo(userResponse); |
328 | return ResponseToGridUserInfo(userResponse); | ||
329 | else | ||
330 | m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for " + userID + ": " + userResponse["Message"].AsString()); | ||
331 | 326 | ||
332 | return null; | ||
333 | } | 327 | } |
334 | 328 | ||
335 | #endregion | 329 | #endregion |
@@ -338,67 +332,51 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
338 | 332 | ||
339 | private OSDMap GetUserData(UUID userID) | 333 | private OSDMap GetUserData(UUID userID) |
340 | { | 334 | { |
341 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID); | 335 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting user data for " + userID); |
342 | 336 | ||
343 | NameValueCollection requestArgs = new NameValueCollection | 337 | NameValueCollection requestArgs = new NameValueCollection |
344 | { | 338 | { |
345 | { "RequestMethod", "GetUser" }, | 339 | { "RequestMethod", "GetUser" }, |
346 | { "UserID", userID.ToString() } | 340 | { "UserID", userID.ToString() } |
347 | }; | 341 | }; |
348 | 342 | ||
349 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 343 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
350 | if (response["Success"].AsBoolean() && response["User"] is OSDMap) | 344 | if (response["Success"].AsBoolean() && response["User"] is OSDMap) |
351 | return response; | 345 | return response; |
352 | else | ||
353 | m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for " + userID + ": " + response["Message"].AsString()); | ||
354 | 346 | ||
347 | m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve user data for {0}; {1}",userID.ToString(),response["Message"].AsString()); | ||
355 | return null; | 348 | return null; |
356 | } | 349 | } |
357 | 350 | ||
358 | private List<PresenceInfo> GetSessions(UUID userID) | 351 | private OSDMap GetSessionDataFromSessionID(UUID sessionID) |
359 | { | 352 | { |
360 | List<PresenceInfo> presences = new List<PresenceInfo>(1); | 353 | NameValueCollection requestArgs = new NameValueCollection |
361 | |||
362 | OSDMap userResponse = GetUserData(userID); | ||
363 | if (userResponse != null) | ||
364 | { | ||
365 | // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting sessions for " + userID); | ||
366 | |||
367 | NameValueCollection requestArgs = new NameValueCollection | ||
368 | { | 354 | { |
369 | { "RequestMethod", "GetSession" }, | 355 | { "RequestMethod", "GetSession" }, |
370 | { "UserID", userID.ToString() } | 356 | { "SessionID", sessionID.ToString() } |
371 | }; | 357 | }; |
372 | 358 | ||
373 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 359 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
374 | if (response["Success"].AsBoolean()) | 360 | if (response["Success"].AsBoolean()) |
375 | { | 361 | return response; |
376 | PresenceInfo presence = ResponseToPresenceInfo(response, userResponse); | ||
377 | if (presence != null) | ||
378 | presences.Add(presence); | ||
379 | } | ||
380 | // else | ||
381 | // { | ||
382 | // m_log.Debug("[SIMIAN PRESENCE CONNECTOR]: No session returned for " + userID + ": " + response["Message"].AsString()); | ||
383 | // } | ||
384 | } | ||
385 | 362 | ||
386 | return presences; | 363 | m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session data for {0}; {1}",sessionID.ToString(),response["Message"].AsString()); |
364 | return null; | ||
387 | } | 365 | } |
388 | 366 | ||
389 | private bool UpdateSession(UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt) | 367 | private bool UpdateSession(UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt) |
390 | { | 368 | { |
391 | // Save our current location as session data | 369 | // Save our current location as session data |
392 | NameValueCollection requestArgs = new NameValueCollection | 370 | NameValueCollection requestArgs = new NameValueCollection |
393 | { | 371 | { |
394 | { "RequestMethod", "UpdateSession" }, | 372 | { "RequestMethod", "UpdateSession" }, |
395 | { "SessionID", sessionID.ToString() }, | 373 | { "SessionID", sessionID.ToString() }, |
396 | { "SceneID", regionID.ToString() }, | 374 | { "SceneID", regionID.ToString() }, |
397 | { "ScenePosition", lastPosition.ToString() }, | 375 | { "ScenePosition", lastPosition.ToString() }, |
398 | { "SceneLookAt", lastLookAt.ToString() } | 376 | { "SceneLookAt", lastLookAt.ToString() } |
399 | }; | 377 | }; |
400 | 378 | ||
401 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 379 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
402 | bool success = response["Success"].AsBoolean(); | 380 | bool success = response["Success"].AsBoolean(); |
403 | 381 | ||
404 | if (!success) | 382 | if (!success) |
@@ -407,7 +385,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
407 | return success; | 385 | return success; |
408 | } | 386 | } |
409 | 387 | ||
410 | private PresenceInfo ResponseToPresenceInfo(OSDMap sessionResponse, OSDMap userResponse) | 388 | private PresenceInfo ResponseToPresenceInfo(OSDMap sessionResponse) |
411 | { | 389 | { |
412 | if (sessionResponse == null) | 390 | if (sessionResponse == null) |
413 | return null; | 391 | return null; |