public OSDMap UnpackTaskItem(BotClient Client, SimObject exportPrim, InventoryItem item, OutputDelegate Failure, out bool missing) { UUID itemID = item.UUID; lock (CompletedTaskItem) if (CompletedTaskItem.Contains(itemID)) { missing = false; return(OSDSerializeMembers(item)); } lock (CompletedTaskItem) if (!CogbotHelpers.IsNullOrZero(item.AssetUUID) && CompletedAssets.Contains(item.AssetUUID)) { TaskItemComplete(exportPrim.ID, itemID, item.AssetUUID, item.AssetType); missing = false; return(OSDSerializeMembers(item)); } if (showsMissingOnly) { Failure("NEED TASKITEM: " + ItemDesc(item, exportPrim)); missing = true; return(OSDSerializeMembers(item)); } ExportTaskAsset ho; AutoResetEvent waitUntilDL = new AutoResetEvent(false); lock (TaskAssetWaiting) if (!TaskAssetWaiting.TryGetValue(itemID, out ho)) { TaskAssetWaiting[itemID] = ho = new ExportTaskAsset { SourceItem = item, O = exportPrim }; ho.waiting = waitUntilDL; } waitUntilDL = ho.waiting; lock (CompletedTaskItem) if (!CogbotHelpers.IsNullOrZero(item.AssetUUID) && CompletedAssets.Contains(item.AssetUUID)) { TaskItemComplete(exportPrim.ID, itemID, item.AssetUUID, item.AssetType); missing = false; return(OSDSerializeMembers(item)); } SlowlyDo(ho.Request); missing = waitUntilDL == null || !waitUntilDL.WaitOne(4000); if (CogbotHelpers.IsNullOrZero(item.AssetUUID)) { Failure("ASSET ZERO " + ItemDesc(item, exportPrim)); missing = true; } AddRelated(item.AssetUUID, item.AssetType); FindOrCreateAsset(item.AssetUUID, item.AssetType); return(OSDSerializeMembers(item)); }
public OSDMap UnpackTaskItem(BotClient Client, SimObject exportPrim, InventoryItem item, OutputDelegate Failure, out bool missing) { UUID itemID = item.UUID; lock (CompletedTaskItem) if (CompletedTaskItem.Contains(itemID)) { missing = false; return OSDSerializeMembers(item); } lock (CompletedTaskItem) if (!CogbotHelpers.IsNullOrZero(item.AssetUUID) && CompletedAssets.Contains(item.AssetUUID)) { TaskItemComplete(exportPrim.ID, itemID, item.AssetUUID, item.AssetType); missing = false; return OSDSerializeMembers(item); } if (showsMissingOnly) { Failure("NEED TASKITEM: " + ItemDesc(item, exportPrim)); missing = true; return OSDSerializeMembers(item); } ExportTaskAsset ho; AutoResetEvent waitUntilDL = new AutoResetEvent(false); lock (TaskAssetWaiting) if (!TaskAssetWaiting.TryGetValue(itemID, out ho)) { TaskAssetWaiting[itemID] = ho = new ExportTaskAsset { SourceItem = item, O = exportPrim }; ho.waiting = waitUntilDL; } waitUntilDL = ho.waiting; lock (CompletedTaskItem) if (!CogbotHelpers.IsNullOrZero(item.AssetUUID) && CompletedAssets.Contains(item.AssetUUID)) { TaskItemComplete(exportPrim.ID, itemID, item.AssetUUID, item.AssetType); missing = false; return OSDSerializeMembers(item); } SlowlyDo(ho.Request); missing = waitUntilDL == null || !waitUntilDL.WaitOne(4000); if (CogbotHelpers.IsNullOrZero(item.AssetUUID)) { Failure("ASSET ZERO " + ItemDesc(item, exportPrim)); missing = true; } AddRelated(item.AssetUUID, item.AssetType); FindOrCreateAsset(item.AssetUUID, item.AssetType); return OSDSerializeMembers(item); }