diff options
author | David Walter Seikel | 2016-11-03 21:44:39 +1000 |
---|---|---|
committer | David Walter Seikel | 2016-11-03 21:44:39 +1000 |
commit | 134f86e8d5c414409631b25b8c6f0ee45fbd8631 (patch) | |
tree | 216b89d3fb89acfb81be1e440c25c41ab09fa96d /OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs | |
parent | More changing to production grid. Double oops. (diff) | |
download | opensim-SC-134f86e8d5c414409631b25b8c6f0ee45fbd8631.zip opensim-SC-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.gz opensim-SC-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.bz2 opensim-SC-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.xz |
Initial update to OpenSim 0.8.2.1 source code.
Diffstat (limited to 'OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs')
-rw-r--r-- | OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs | 119 |
1 files changed, 68 insertions, 51 deletions
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs index a391275..e793420 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs | |||
@@ -38,12 +38,14 @@ using OpenSim.Framework; | |||
38 | using OpenSim.Region.Framework.Interfaces; | 38 | using OpenSim.Region.Framework.Interfaces; |
39 | using OpenSim.Region.Framework.Scenes; | 39 | using OpenSim.Region.Framework.Scenes; |
40 | using OpenSim.Services.Interfaces; | 40 | using OpenSim.Services.Interfaces; |
41 | using PermissionMask = OpenSim.Framework.PermissionMask; | ||
41 | 42 | ||
42 | namespace OpenSim.Services.Connectors.SimianGrid | 43 | namespace OpenSim.Services.Connectors.SimianGrid |
43 | { | 44 | { |
44 | /// <summary> | 45 | /// <summary> |
45 | /// Permissions bitflags | 46 | /// Permissions bitflags |
46 | /// </summary> | 47 | /// </summary> |
48 | /* | ||
47 | [Flags] | 49 | [Flags] |
48 | public enum PermissionMask : uint | 50 | public enum PermissionMask : uint |
49 | { | 51 | { |
@@ -55,6 +57,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
55 | Damage = 1 << 20, | 57 | Damage = 1 << 20, |
56 | All = 0x7FFFFFFF | 58 | All = 0x7FFFFFFF |
57 | } | 59 | } |
60 | */ | ||
58 | 61 | ||
59 | /// <summary> | 62 | /// <summary> |
60 | /// Connects avatar inventories to the SimianGrid backend | 63 | /// Connects avatar inventories to the SimianGrid backend |
@@ -71,6 +74,9 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
71 | // private object m_gestureSyncRoot = new object(); | 74 | // private object m_gestureSyncRoot = new object(); |
72 | private bool m_Enabled = false; | 75 | private bool m_Enabled = false; |
73 | 76 | ||
77 | private const double CACHE_EXPIRATION_SECONDS = 20.0; | ||
78 | private static ExpiringCache<UUID, InventoryItemBase> m_ItemCache; | ||
79 | |||
74 | #region ISharedRegionModule | 80 | #region ISharedRegionModule |
75 | 81 | ||
76 | public Type ReplaceableInterface { get { return null; } } | 82 | public Type ReplaceableInterface { get { return null; } } |
@@ -96,6 +102,9 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
96 | url = url + '/'; | 102 | url = url + '/'; |
97 | m_serverUrl = url; | 103 | m_serverUrl = url; |
98 | 104 | ||
105 | if (m_ItemCache == null) | ||
106 | m_ItemCache = new ExpiringCache<UUID, InventoryItemBase>(); | ||
107 | |||
99 | } | 108 | } |
100 | 109 | ||
101 | public void Initialise(IConfigSource source) | 110 | public void Initialise(IConfigSource source) |
@@ -129,6 +138,8 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
129 | { | 138 | { |
130 | m_userServerUrl = serviceUrl; | 139 | m_userServerUrl = serviceUrl; |
131 | m_Enabled = true; | 140 | m_Enabled = true; |
141 | if (m_ItemCache == null) | ||
142 | m_ItemCache = new ExpiringCache<UUID, InventoryItemBase>(); | ||
132 | } | 143 | } |
133 | } | 144 | } |
134 | } | 145 | } |
@@ -153,7 +164,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
153 | { "OwnerID", userID.ToString() } | 164 | { "OwnerID", userID.ToString() } |
154 | }; | 165 | }; |
155 | 166 | ||
156 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 167 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
157 | bool success = response["Success"].AsBoolean(); | 168 | bool success = response["Success"].AsBoolean(); |
158 | 169 | ||
159 | if (!success) | 170 | if (!success) |
@@ -179,7 +190,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
179 | { "ChildrenOnly", "0" } | 190 | { "ChildrenOnly", "0" } |
180 | }; | 191 | }; |
181 | 192 | ||
182 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 193 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
183 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) | 194 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) |
184 | { | 195 | { |
185 | OSDArray items = (OSDArray)response["Items"]; | 196 | OSDArray items = (OSDArray)response["Items"]; |
@@ -194,37 +205,6 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
194 | } | 205 | } |
195 | 206 | ||
196 | /// <summary> | 207 | /// <summary> |
197 | /// Synchronous inventory fetch. | ||
198 | /// </summary> | ||
199 | /// <param name="userID"></param> | ||
200 | /// <returns></returns> | ||
201 | [Obsolete] | ||
202 | public InventoryCollection GetUserInventory(UUID userID) | ||
203 | { | ||
204 | m_log.Error("[SIMIAN INVENTORY CONNECTOR]: Obsolete GetUserInventory called for " + userID); | ||
205 | |||
206 | InventoryCollection inventory = new InventoryCollection(); | ||
207 | inventory.UserID = userID; | ||
208 | inventory.Folders = new List<InventoryFolderBase>(); | ||
209 | inventory.Items = new List<InventoryItemBase>(); | ||
210 | |||
211 | return inventory; | ||
212 | } | ||
213 | |||
214 | /// <summary> | ||
215 | /// Request the inventory for a user. This is an asynchronous operation that will call the callback when the | ||
216 | /// inventory has been received | ||
217 | /// </summary> | ||
218 | /// <param name="userID"></param> | ||
219 | /// <param name="callback"></param> | ||
220 | [Obsolete] | ||
221 | public void GetUserInventory(UUID userID, InventoryReceiptCallback callback) | ||
222 | { | ||
223 | m_log.Error("[SIMIAN INVENTORY CONNECTOR]: Obsolete GetUserInventory called for " + userID); | ||
224 | callback(new List<InventoryFolderImpl>(0), new List<InventoryItemBase>(0)); | ||
225 | } | ||
226 | |||
227 | /// <summary> | ||
228 | /// Retrieve the root inventory folder for the given user. | 208 | /// Retrieve the root inventory folder for the given user. |
229 | /// </summary> | 209 | /// </summary> |
230 | /// <param name="userID"></param> | 210 | /// <param name="userID"></param> |
@@ -241,7 +221,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
241 | { "ChildrenOnly", "1" } | 221 | { "ChildrenOnly", "1" } |
242 | }; | 222 | }; |
243 | 223 | ||
244 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 224 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
245 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) | 225 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) |
246 | { | 226 | { |
247 | OSDArray items = (OSDArray)response["Items"]; | 227 | OSDArray items = (OSDArray)response["Items"]; |
@@ -260,7 +240,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
260 | /// <param name="userID"></param> | 240 | /// <param name="userID"></param> |
261 | /// <param name="type"></param> | 241 | /// <param name="type"></param> |
262 | /// <returns></returns> | 242 | /// <returns></returns> |
263 | public InventoryFolderBase GetFolderForType(UUID userID, AssetType type) | 243 | public InventoryFolderBase GetFolderForType(UUID userID, FolderType type) |
264 | { | 244 | { |
265 | string contentType = SLUtil.SLAssetTypeToContentType((int)type); | 245 | string contentType = SLUtil.SLAssetTypeToContentType((int)type); |
266 | 246 | ||
@@ -271,7 +251,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
271 | { "OwnerID", userID.ToString() } | 251 | { "OwnerID", userID.ToString() } |
272 | }; | 252 | }; |
273 | 253 | ||
274 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 254 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
275 | if (response["Success"].AsBoolean() && response["Folder"] is OSDMap) | 255 | if (response["Success"].AsBoolean() && response["Folder"] is OSDMap) |
276 | { | 256 | { |
277 | OSDMap folder = (OSDMap)response["Folder"]; | 257 | OSDMap folder = (OSDMap)response["Folder"]; |
@@ -299,6 +279,10 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
299 | /// <returns></returns> | 279 | /// <returns></returns> |
300 | public InventoryItemBase GetItem(InventoryItemBase item) | 280 | public InventoryItemBase GetItem(InventoryItemBase item) |
301 | { | 281 | { |
282 | InventoryItemBase retrieved = null; | ||
283 | if (m_ItemCache.TryGetValue(item.ID, out retrieved)) | ||
284 | return retrieved; | ||
285 | |||
302 | NameValueCollection requestArgs = new NameValueCollection | 286 | NameValueCollection requestArgs = new NameValueCollection |
303 | { | 287 | { |
304 | { "RequestMethod", "GetInventoryNode" }, | 288 | { "RequestMethod", "GetInventoryNode" }, |
@@ -309,7 +293,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
309 | { "ChildrenOnly", "1" } | 293 | { "ChildrenOnly", "1" } |
310 | }; | 294 | }; |
311 | 295 | ||
312 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 296 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
313 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) | 297 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) |
314 | { | 298 | { |
315 | List<InventoryItemBase> items = GetItemsFromResponse((OSDArray)response["Items"]); | 299 | List<InventoryItemBase> items = GetItemsFromResponse((OSDArray)response["Items"]); |
@@ -320,7 +304,11 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
320 | for (int i = 0; i < items.Count; i++) | 304 | for (int i = 0; i < items.Count; i++) |
321 | { | 305 | { |
322 | if (items[i].ID == item.ID) | 306 | if (items[i].ID == item.ID) |
323 | return items[i]; | 307 | { |
308 | retrieved = items[i]; | ||
309 | m_ItemCache.AddOrUpdate(item.ID, retrieved, CACHE_EXPIRATION_SECONDS); | ||
310 | return retrieved; | ||
311 | } | ||
324 | } | 312 | } |
325 | } | 313 | } |
326 | } | 314 | } |
@@ -329,6 +317,21 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
329 | return null; | 317 | return null; |
330 | } | 318 | } |
331 | 319 | ||
320 | public InventoryItemBase[] GetMultipleItems(UUID principalID, UUID[] itemIDs) | ||
321 | { | ||
322 | InventoryItemBase[] result = new InventoryItemBase[itemIDs.Length]; | ||
323 | int i = 0; | ||
324 | InventoryItemBase item = new InventoryItemBase(); | ||
325 | item.Owner = principalID; | ||
326 | foreach (UUID id in itemIDs) | ||
327 | { | ||
328 | item.ID = id; | ||
329 | result[i++] = GetItem(item); | ||
330 | } | ||
331 | |||
332 | return result; | ||
333 | } | ||
334 | |||
332 | /// <summary> | 335 | /// <summary> |
333 | /// Get a folder, given by its UUID | 336 | /// Get a folder, given by its UUID |
334 | /// </summary> | 337 | /// </summary> |
@@ -346,7 +349,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
346 | { "ChildrenOnly", "1" } | 349 | { "ChildrenOnly", "1" } |
347 | }; | 350 | }; |
348 | 351 | ||
349 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 352 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
350 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) | 353 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) |
351 | { | 354 | { |
352 | OSDArray items = (OSDArray)response["Items"]; | 355 | OSDArray items = (OSDArray)response["Items"]; |
@@ -368,7 +371,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
368 | public InventoryCollection GetFolderContent(UUID userID, UUID folderID) | 371 | public InventoryCollection GetFolderContent(UUID userID, UUID folderID) |
369 | { | 372 | { |
370 | InventoryCollection inventory = new InventoryCollection(); | 373 | InventoryCollection inventory = new InventoryCollection(); |
371 | inventory.UserID = userID; | 374 | inventory.OwnerID = userID; |
372 | 375 | ||
373 | NameValueCollection requestArgs = new NameValueCollection | 376 | NameValueCollection requestArgs = new NameValueCollection |
374 | { | 377 | { |
@@ -380,7 +383,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
380 | { "ChildrenOnly", "1" } | 383 | { "ChildrenOnly", "1" } |
381 | }; | 384 | }; |
382 | 385 | ||
383 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 386 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
384 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) | 387 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) |
385 | { | 388 | { |
386 | OSDArray items = (OSDArray)response["Items"]; | 389 | OSDArray items = (OSDArray)response["Items"]; |
@@ -399,6 +402,18 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
399 | return inventory; | 402 | return inventory; |
400 | } | 403 | } |
401 | 404 | ||
405 | public virtual InventoryCollection[] GetMultipleFoldersContent(UUID principalID, UUID[] folderIDs) | ||
406 | { | ||
407 | InventoryCollection[] invColl = new InventoryCollection[folderIDs.Length]; | ||
408 | int i = 0; | ||
409 | foreach (UUID fid in folderIDs) | ||
410 | { | ||
411 | invColl[i++] = GetFolderContent(principalID, fid); | ||
412 | } | ||
413 | |||
414 | return invColl; | ||
415 | } | ||
416 | |||
402 | /// <summary> | 417 | /// <summary> |
403 | /// Gets the items inside a folder | 418 | /// Gets the items inside a folder |
404 | /// </summary> | 419 | /// </summary> |
@@ -408,7 +423,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
408 | public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) | 423 | public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) |
409 | { | 424 | { |
410 | InventoryCollection inventory = new InventoryCollection(); | 425 | InventoryCollection inventory = new InventoryCollection(); |
411 | inventory.UserID = userID; | 426 | inventory.OwnerID = userID; |
412 | 427 | ||
413 | NameValueCollection requestArgs = new NameValueCollection | 428 | NameValueCollection requestArgs = new NameValueCollection |
414 | { | 429 | { |
@@ -420,7 +435,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
420 | { "ChildrenOnly", "1" } | 435 | { "ChildrenOnly", "1" } |
421 | }; | 436 | }; |
422 | 437 | ||
423 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 438 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
424 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) | 439 | if (response["Success"].AsBoolean() && response["Items"] is OSDArray) |
425 | { | 440 | { |
426 | OSDArray items = (OSDArray)response["Items"]; | 441 | OSDArray items = (OSDArray)response["Items"]; |
@@ -451,7 +466,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
451 | { "ContentType", SLUtil.SLAssetTypeToContentType(folder.Type) } | 466 | { "ContentType", SLUtil.SLAssetTypeToContentType(folder.Type) } |
452 | }; | 467 | }; |
453 | 468 | ||
454 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 469 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
455 | bool success = response["Success"].AsBoolean(); | 470 | bool success = response["Success"].AsBoolean(); |
456 | 471 | ||
457 | if (!success) | 472 | if (!success) |
@@ -515,7 +530,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
515 | { "ItemID", itemID.ToString() } | 530 | { "ItemID", itemID.ToString() } |
516 | }; | 531 | }; |
517 | 532 | ||
518 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 533 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
519 | bool success = response["Success"].AsBoolean(); | 534 | bool success = response["Success"].AsBoolean(); |
520 | 535 | ||
521 | if (!success) | 536 | if (!success) |
@@ -543,7 +558,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
543 | { "FolderID", folder.ID.ToString() } | 558 | { "FolderID", folder.ID.ToString() } |
544 | }; | 559 | }; |
545 | 560 | ||
546 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 561 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
547 | bool success = response["Success"].AsBoolean(); | 562 | bool success = response["Success"].AsBoolean(); |
548 | 563 | ||
549 | if (!success) | 564 | if (!success) |
@@ -565,7 +580,9 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
565 | // A folder of UUID.Zero means we need to find the most appropriate home for this item | 580 | // A folder of UUID.Zero means we need to find the most appropriate home for this item |
566 | if (item.Folder == UUID.Zero) | 581 | if (item.Folder == UUID.Zero) |
567 | { | 582 | { |
568 | InventoryFolderBase folder = GetFolderForType(item.Owner, (AssetType)item.AssetType); | 583 | InventoryFolderBase folder = null; |
584 | if (Enum.IsDefined(typeof(FolderType), (sbyte)item.AssetType)) | ||
585 | folder = GetFolderForType(item.Owner, (FolderType)item.AssetType); | ||
569 | if (folder != null && folder.ID != UUID.Zero) | 586 | if (folder != null && folder.ID != UUID.Zero) |
570 | item.Folder = folder.ID; | 587 | item.Folder = folder.ID; |
571 | else | 588 | else |
@@ -620,7 +637,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
620 | { "ExtraData", OSDParser.SerializeJsonString(extraData) } | 637 | { "ExtraData", OSDParser.SerializeJsonString(extraData) } |
621 | }; | 638 | }; |
622 | 639 | ||
623 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 640 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
624 | bool success = response["Success"].AsBoolean(); | 641 | bool success = response["Success"].AsBoolean(); |
625 | 642 | ||
626 | if (!success) | 643 | if (!success) |
@@ -844,7 +861,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
844 | { "Items", String.Join(",", itemIDs) } | 861 | { "Items", String.Join(",", itemIDs) } |
845 | }; | 862 | }; |
846 | 863 | ||
847 | OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs); | 864 | OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); |
848 | bool success = response["Success"].AsBoolean(); | 865 | bool success = response["Success"].AsBoolean(); |
849 | 866 | ||
850 | if (!success) | 867 | if (!success) |
@@ -882,7 +899,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
882 | { "UserID", userID.ToString() } | 899 | { "UserID", userID.ToString() } |
883 | }; | 900 | }; |
884 | 901 | ||
885 | OSDMap response = WebUtil.PostToService(m_userServerUrl, requestArgs); | 902 | OSDMap response = SimianGrid.PostToService(m_userServerUrl, requestArgs); |
886 | if (response["Success"].AsBoolean()) | 903 | if (response["Success"].AsBoolean()) |
887 | { | 904 | { |
888 | OSDMap user = response["User"] as OSDMap; | 905 | OSDMap user = response["User"] as OSDMap; |
@@ -913,7 +930,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
913 | { "Gestures", OSDParser.SerializeJsonString(gestures) } | 930 | { "Gestures", OSDParser.SerializeJsonString(gestures) } |
914 | }; | 931 | }; |
915 | 932 | ||
916 | OSDMap response = WebUtil.PostToService(m_userServerUrl, requestArgs); | 933 | OSDMap response = SimianGrid.PostToService(m_userServerUrl, requestArgs); |
917 | if (!response["Success"].AsBoolean()) | 934 | if (!response["Success"].AsBoolean()) |
918 | { | 935 | { |
919 | m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to save active gestures for " + userID + ": " + | 936 | m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to save active gestures for " + userID + ": " + |