상속: System.EventArgs
        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<InventoryFolder> m_foldersToFetch = new List<InventoryFolder>();
                    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);
                }
            }

        }
예제 #2
0
 ///<summary>Raises the FolderUpdated Event</summary>
 /// <param name="e">A FolderUpdatedEventArgs object containing
 /// the data sent from the simulator</param>
 protected virtual void OnFolderUpdated(FolderUpdatedEventArgs e)
 {
     EventHandler<FolderUpdatedEventArgs> handler = m_FolderUpdated;
     if (handler != null)
         handler(this, e);
 }
예제 #3
0
        void Inventory_FolderUpdated(object sender, FolderUpdatedEventArgs e)
        {
            if (COF == null) return;

            if (e.FolderID == COF.UUID && e.Success)
            {
                COF = (InventoryFolder)Client.Inventory.Store[COF.UUID];
                lock (FolderSync)
                {
                    lock (Content) Content.Clear();

                    List<UUID> items = new List<UUID>();
                    List<UUID> owners = new List<UUID>();

                    foreach (var link in ContentLinks())
                    {
                        //if (Client.Inventory.Store.Contains(link.AssetUUID))
                        //{
                        //    continue;
                        //}
                        items.Add(link.AssetUUID);
                        owners.Add(Client.Self.AgentID);
                    }

                    if (items.Count > 0)
                    {
                        Client.Inventory.RequestFetchInventory(items, owners);
                    }
                }
            }
        }
예제 #4
0
        void Inventory_FolderUpdated(object sender, FolderUpdatedEventArgs e)
        {
            if (COF == null) return;

            if (e.FolderID == COF.UUID && e.Success)
            {
                lock (FolderSync)
                {
                    lock (Content) Content.Clear();
                    lock (ContentLinks) ContentLinks.Clear();

                    List<InventoryBase> content = Client.Inventory.Store.GetContents(COF);
                    foreach (var baseItem in content)
                    {
                        if (baseItem is InventoryItem)
                        {
                            InventoryItem item = (InventoryItem)baseItem;
                            if (item.AssetType == AssetType.Link)
                            {
                                ContentLinks.Add(item);
                            }
                        }
                    }

                    List<UUID> items = new List<UUID>();
                    List<UUID> owners = new List<UUID>();

                    lock (ContentLinks)
                    {
                        foreach (var link in ContentLinks)
                        {
                            items.Add(link.AssetUUID);
                            owners.Add(Client.Self.AgentID);
                        }
                    }

                    if (items.Count > 0)
                    {
                        Client.Inventory.RequestFetchInventory(items, owners);
                    }
                }
            }
        }
예제 #5
0
 private void Inventory_OnFolderUpdated(object sender, FolderUpdatedEventArgs e)
 {
     var folderid = e.FolderID;
     lock (BusyUpdating) if (BusyUpdating.Contains(folderid)) return;
     LoadFolderId(folderid);
  //   lock (BusyUpdating) if (BusyUpdating.Remove(folderid)) return;
 }
예제 #6
0
        /*
		         
         On-Folder-Updated
        folderID: "29a6c2e7-cfd0-4c59-a629-b81262a0d9a2"
         */

        public override void Inventory_OnFolderUpdated(object sender, FolderUpdatedEventArgs e)
        {
            var folderID = e.FolderID;
            RegisterUUID(folderID, client.Inventory.Store[folderID]); //;;typeof(OpenMetaverse.InventoryFolder);
            //base.Inventory_OnFolderUpdated(folderID);
        }
예제 #7
0
        //Seperate thread
        private void Inventory_OnFolderUpdated(object sender, FolderUpdatedEventArgs e)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new MethodInvoker(delegate()
                {
                    Inventory_OnFolderUpdated(sender, e);
                }));

                return;
            }

            try
            {
                if (!searching)
                {
                    //if (folderproc == e.FolderID)
                    //{
                        ////WorkPool.QueueUserWorkItem(new WaitCallback(UpdateFolder), e.FolderID);

                        client.Inventory.FolderUpdated -= new EventHandler<FolderUpdatedEventArgs>(Inventory_OnFolderUpdated);
                        UpdateFolder(e.FolderID);
                        client.Inventory.FolderUpdated += new EventHandler<FolderUpdatedEventArgs>(Inventory_OnFolderUpdated);
                        //folderproc = UUID.Zero;

                        if (instance.CoF != null)
                        {
                            if (e.FolderID == instance.CoF.UUID)
                            {
                                instance.CoF = (InventoryFolder)client.Inventory.Store.Items[client.Inventory.FindFolderForType(AssetType.CurrentOutfitFolder)].Data;
                            }
                        }

                    //}
                }
            }
            catch { ; }
        }
예제 #8
0
 public void Inventory_FolderUpdated(object sender, FolderUpdatedEventArgs e)
 {
     List<InventoryBase> contents = Client.Inventory.Store.GetContents(e.FolderID);
     Hashtable roothash = new Hashtable();
     roothash.Add("MessageType", "FolderUpdated");
     roothash.Add("FolderID", e.FolderID);
     List<Hashtable> response = new List<Hashtable>();
     lock (LoadedInventory)
     {
         foreach (InventoryBase o in contents)
         {
             if (LoadedInventory.Contains(o.UUID)) continue;
             LoadedInventory.Add(o.UUID);
             Hashtable hash = new Hashtable();
             if (o is InventoryFolder)
             {
                 InventoryFolder folder = (InventoryFolder)o;
                 hash.Add("Type", "InventoryFolder");
                 hash.Add("Name", folder.Name);
                 hash.Add("PreferredType", folder.PreferredType);
                 hash.Add("OwnerID", folder.OwnerID);
                 hash.Add("UUID", folder.UUID);
                 response.Add(hash);
             }
             else if (o is InventoryItem)
             {
                 InventoryItem item = (InventoryItem)o;
                 hash.Add("Type", "InventoryItem");
                 hash.Add("Name", item.Name);
                 hash.Add("UUID", item.UUID);
                 hash.Add("AssetType", item.AssetType);
                 hash.Add("AssetUUID", item.AssetUUID);
                 hash.Add("CreatorID", item.CreatorID);
                 hash.Add("OwnerID", item.OwnerID);
                 hash.Add("CreationDate", item.CreationDate);
                 hash.Add("Description", item.Description);
                 hash.Add("Flags", item.Flags);
                 hash.Add("InventoryType", item.InventoryType);
                 hash.Add("Permissions", item.Permissions);
                 response.Add(hash);
             }
         }
     }
     roothash.Add("Contents", response);
     enqueue(roothash);
 }
예제 #9
0
 public virtual void Inventory_OnFolderUpdated(object sender, FolderUpdatedEventArgs e) { OnEvent("On-Folder-Updated", paramNamesOnFolderUpdated, paramTypesOnFolderUpdated, e); }
예제 #10
0
 private void FashionBotModuleMain_OnFolderUpdated(object sender, FolderUpdatedEventArgs e)
 {
     EnumerateClothing();
 }