From cc1fc400d86440c49c62888a9fc39dd162f3c8e4 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Thu, 7 May 2015 12:37:49 -0700
Subject: pCampbot: added behavior that mimic initial inventory download. It's
not exactly what the viewer does, but it's close enough, and the elapsed time
can be measured.
---
.../Behaviours/InventoryDownloadBehaviour.cs | 121 +++++++++++++++++++++
OpenSim/Tools/pCampBot/BotManager.cs | 3 +
2 files changed, 124 insertions(+)
create mode 100644 OpenSim/Tools/pCampBot/Behaviours/InventoryDownloadBehaviour.cs
(limited to 'OpenSim/Tools')
diff --git a/OpenSim/Tools/pCampBot/Behaviours/InventoryDownloadBehaviour.cs b/OpenSim/Tools/pCampBot/Behaviours/InventoryDownloadBehaviour.cs
new file mode 100644
index 0000000..521415c
--- /dev/null
+++ b/OpenSim/Tools/pCampBot/Behaviours/InventoryDownloadBehaviour.cs
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using OpenMetaverse;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+using System.Linq;
+using pCampBot.Interfaces;
+
+namespace pCampBot
+{
+ ///
+ /// Do nothing
+ ///
+ public class InventoryDownloadBehaviour : AbstractBehaviour
+ {
+ private bool m_initialized;
+ private int m_Requests = 2;
+ private Stopwatch m_StopWatch = new Stopwatch();
+ private List m_processed = new List();
+
+ public InventoryDownloadBehaviour()
+ {
+ AbbreviatedName = "inv";
+ Name = "Inventory";
+ }
+
+ public override void Action()
+ {
+ if (!m_initialized)
+ {
+ m_initialized = true;
+ Bot.Client.Settings.HTTP_INVENTORY = true;
+ Bot.Client.Settings.FETCH_MISSING_INVENTORY = true;
+ Bot.Client.Inventory.FolderUpdated += Inventory_FolderUpdated;
+ Console.WriteLine("Lib owner is " + Bot.Client.Inventory.Store.LibraryRootNode.Data.OwnerID);
+ m_StopWatch.Start();
+ Bot.Client.Inventory.RequestFolderContents(Bot.Client.Inventory.Store.RootFolder.UUID, Bot.Client.Self.AgentID, true, true, InventorySortOrder.ByDate);
+ Bot.Client.Inventory.RequestFolderContents(Bot.Client.Inventory.Store.LibraryRootNode.Data.UUID, Bot.Client.Inventory.Store.LibraryRootNode.Data.OwnerID, true, true, InventorySortOrder.ByDate);
+ }
+
+ Thread.Sleep(1000);
+ Console.WriteLine("Total items: " + Bot.Client.Inventory.Store.Items.Count + "; Total requests: " + m_Requests + "; Time: " + m_StopWatch.Elapsed);
+
+ }
+
+ void Inventory_FolderUpdated(object sender, FolderUpdatedEventArgs e)
+ {
+ if (e.Success)
+ {
+ //Console.WriteLine("Folder " + e.FolderID + " updated");
+ bool fetch = false;
+ lock (m_processed)
+ {
+ if (!m_processed.Contains(e.FolderID))
+ {
+ m_processed.Add(e.FolderID);
+ fetch = true;
+ }
+ }
+
+ if (fetch)
+ {
+ List m_foldersToFetch = new List();
+ foreach (InventoryBase item in Bot.Client.Inventory.Store.GetContents(e.FolderID))
+ {
+ if (item is InventoryFolder)
+ {
+ InventoryFolder f = new InventoryFolder(item.UUID);
+ f.OwnerID = item.OwnerID;
+ m_foldersToFetch.Add(f);
+ }
+ }
+ if (m_foldersToFetch.Count > 0)
+ {
+ m_Requests += 1;
+ Bot.Client.Inventory.RequestFolderContentsCap(m_foldersToFetch, Bot.Client.Network.CurrentSim.Caps.CapabilityURI("FetchInventoryDescendents2"), true, true, InventorySortOrder.ByDate);
+ }
+ }
+
+ if (Bot.Client.Inventory.Store.Items.Count >= 15739)
+ {
+ m_StopWatch.Stop();
+ Console.WriteLine("Stop! Total items: " + Bot.Client.Inventory.Store.Items.Count + "; Total requests: " + m_Requests + "; Time: " + m_StopWatch.Elapsed);
+ }
+ }
+
+ }
+
+ public override void Interrupt()
+ {
+ m_interruptEvent.Set();
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Tools/pCampBot/BotManager.cs b/OpenSim/Tools/pCampBot/BotManager.cs
index 46094d6..0af9592 100644
--- a/OpenSim/Tools/pCampBot/BotManager.cs
+++ b/OpenSim/Tools/pCampBot/BotManager.cs
@@ -343,6 +343,9 @@ namespace pCampBot
if (abName == "ph2")
newBehaviour = new PhysicsBehaviour2();
+ if (abName == "inv")
+ newBehaviour = new InventoryDownloadBehaviour();
+
if (newBehaviour != null)
{
behaviours.Add(newBehaviour);
--
cgit v1.1