/// <summary>
        /// <see cref="OpenSim.Framework.Communications.IInventoryServices"></see>
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="callback"></param>
        public void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback)
        {
            if (!m_RequestingInventory.ContainsKey(userID))
            {
                m_RequestingInventory.Add(userID, callback);

                try
                {
                    m_log.InfoFormat(
                        "[OGS1 INVENTORY SERVICE]: Requesting inventory from {0}/GetInventory/ for user {1}",
                        _inventoryServerUrl, userID);

                    RestObjectPosterResponse <InventoryCollection> requester
                        = new RestObjectPosterResponse <InventoryCollection>();
                    requester.ResponseCallback = InventoryResponse;

                    requester.BeginPostObject <Guid>(_inventoryServerUrl + "/GetInventory/", userID.Guid);
                }
                catch (WebException e)
                {
                    if (StatsManager.SimExtraStats != null)
                    {
                        StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure();
                    }

                    m_log.ErrorFormat("[OGS1 INVENTORY SERVICE]: Request inventory operation failed, {0} {1}",
                                      e.Source, e.Message);
                }
            }
            else
            {
                m_log.ErrorFormat("[OGS1 INVENTORY SERVICE]: RequestInventoryForUser() - could you not find user profile for {0}", userID);
            }
        }
Пример #2
0
        /// <summary>
        /// <see cref="OpenSim.Framework.Communications.IInventoryServices"></see>
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="callback"></param>
        public void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback)
        {
            if (!m_RequestingInventory.ContainsKey(userID))
            {
                m_RequestingInventory.Add(userID, callback);

                try
                {
                    m_log.InfoFormat(
                        "[OGS1 INVENTORY SERVICE]: Requesting inventory from {0}/GetInventory/ for user {1}",
                        _inventoryServerUrl, userID);

                    RestObjectPosterResponse<InventoryCollection> requester
                        = new RestObjectPosterResponse<InventoryCollection>();
                    requester.ResponseCallback = InventoryResponse;

                    requester.BeginPostObject<Guid>(_inventoryServerUrl + "/GetInventory/", userID.Guid);
                }
                catch (WebException e)
                {
                    if (StatsManager.SimExtraStats != null)
                        StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure();

                    m_log.ErrorFormat("[OGS1 INVENTORY SERVICE]: Request inventory operation failed, {0} {1}",
                        e.Source, e.Message);
                }
            }
            else
            {
                m_log.ErrorFormat("[OGS1 INVENTORY SERVICE]: RequestInventoryForUser() - could you not find user profile for {0}", userID);
            }
        }
        public override void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback)
        {
            m_log.InfoFormat("[LOCAL INVENTORY SERVICE]: Requesting inventory for user {0}", userID);

            List <InventoryFolderBase> skeletonFolders = GetInventorySkeleton(userID);

            if (skeletonFolders == null)
            {
                return;
            }

            InventoryFolderImpl rootFolder = null;

            List <InventoryFolderImpl>             folders       = new List <InventoryFolderImpl>();
            List <InventoryItemBase>               allItems      = RequestAllItems(userID);
            Dictionary <UUID, InventoryFolderImpl> sortedFolders = new Dictionary <UUID, InventoryFolderImpl>();
            List <InventoryItemBase>               folderItems   = new List <InventoryItemBase>();

            // Need to retrieve the root folder on the first pass
            foreach (InventoryFolderBase folder in skeletonFolders)
            {
                if (folder.ParentID == UUID.Zero)
                {
                    rootFolder = new InventoryFolderImpl(folder);
                    folders.Add(rootFolder);
                    sortedFolders.Add(folder.ID, rootFolder);
                    //items.AddRange(RequestFolderItems(rootFolder.ID));
                    break; // Only 1 root folder per user
                }
            }

            if (rootFolder != null)
            {
                foreach (InventoryFolderBase folder in skeletonFolders)
                {
                    if (folder.ID != rootFolder.ID)
                    {
                        InventoryFolderImpl fimpl = new InventoryFolderImpl(folder);
                        folders.Add(fimpl);
                        sortedFolders.Add(fimpl.ID, fimpl);
                    }
                }

                foreach (InventoryItemBase item in allItems)
                {
                    if (sortedFolders.ContainsKey(item.Folder))
                    {
                        folderItems.Add(item);
                    }
                }
            }



            m_log.InfoFormat(
                "[LOCAL INVENTORY SERVICE]: Received inventory response for user {0} containing {1} folders and {2} items",
                userID, folders.Count, folderItems.Count);

            callback(folders, folderItems);
        }
Пример #4
0
        /// <summary>
        /// Caller must catch eventual Exceptions.
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="sessionID"></param>
        /// <param name="callback"></param>
        public void GetUserInventory(string userIDStr, UUID sessionID, InventoryReceiptCallback callback)
        {
            UUID userID = UUID.Zero;

            if (UUID.TryParse(userIDStr, out userID))
            {
                lock (m_RequestingInventory)
                {
                    // *HACK ALERT*

                    // If an inventory request times out, it blocks any further requests from the
                    // same user, even after a relog. This is bad, and makes me sad.

                    // Really, we should detect a timeout and report a failure to the callback,
                    // BUT in my testing i found that it's hard to detect a timeout.. sometimes,
                    // a partial response is recieved, and sometimes a null response.

                    // So, for now, add a timer of ten seconds (which is the request timeout).

                    // This should basically have the same effect.

                    lock (m_RequestTime)
                    {
                        if (m_RequestTime.ContainsKey(userID))
                        {
                            TimeSpan interval = DateTime.Now - m_RequestTime[userID];
                            if (interval.TotalSeconds > 10)
                            {
                                m_RequestTime.Remove(userID);
                                if (m_RequestingInventory.ContainsKey(userID))
                                {
                                    m_RequestingInventory.Remove(userID);
                                }
                            }
                        }
                        if (!m_RequestingInventory.ContainsKey(userID))
                        {
                            m_RequestTime.Add(userID, DateTime.Now);
                            m_RequestingInventory.Add(userID, callback);
                        }
                        else
                        {
                            m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetUserInventory - ignoring repeated request for user {0}", userID);
                            return;
                        }
                    }
                }

                m_log.InfoFormat(
                    "[INVENTORY CONNECTOR]: Requesting inventory from {0}/GetInventory/ for user {1}",
                    m_ServerURI, userID);

                RestSessionObjectPosterResponse <Guid, InventoryCollection> requester
                    = new RestSessionObjectPosterResponse <Guid, InventoryCollection>();
                requester.ResponseCallback = InventoryResponse;

                requester.BeginPostObject(m_ServerURI + "/GetInventory/", userID.Guid, sessionID.ToString(), userID.ToString());
            }
        }
        public void RequestInventoryForUser(UUID userID, UUID session_id, InventoryReceiptCallback callback)
        {
            if (IsLocalStandaloneUser(userID))
            {
                base.RequestInventoryForUser(userID, callback);
                return;
            }

            // grid/hypergrid mode
            lock (m_RequestingInventory)
            {
                if (!m_RequestingInventory.ContainsKey(userID))
                {
                    m_RequestingInventory.Add(userID, callback);
                }
                else
                {
                    m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: RequestInventoryForUser() - could  not find user profile for {0}", userID);
                    return;
                }
            }
            string invServer = GetUserInventoryURI(userID);

            m_log.InfoFormat(
                "[HGrid INVENTORY SERVICE]: Requesting inventory from {0}/GetInventory/ for user {1} ({2})",
                /*_inventoryServerUrl*/ invServer, userID, userID.Guid);

            try
            {
                //RestSessionObjectPosterResponse<Guid, InventoryCollection> requester
                //    = new RestSessionObjectPosterResponse<Guid, InventoryCollection>();
                //requester.ResponseCallback = InventoryResponse;

                //requester.BeginPostObject(invServer + "/GetInventory/", userID.Guid, session_id.ToString(), userID.ToString());
                GetInventoryDelegate d = GetInventoryAsync;
                d.BeginInvoke(invServer, userID, session_id, GetInventoryCompleted, d);
            }
            catch (WebException e)
            {
                if (StatsManager.SimExtraStats != null)
                {
                    StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure();
                }

                m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: Request inventory operation failed, {0} {1}",
                                  e.Source, e.Message);

                // Well, let's synthesize one
                InventoryCollection icol = new InventoryCollection();
                icol.UserID  = userID;
                icol.Items   = new List <InventoryItemBase>();
                icol.Folders = new List <InventoryFolderBase>();
                InventoryFolderBase rootFolder = new InventoryFolderBase();
                rootFolder.ID    = UUID.Random();
                rootFolder.Owner = userID;
                icol.Folders.Add(rootFolder);
                InventoryResponse(icol);
            }
        }
        /// <summary>
        /// Callback used by the inventory server GetInventory request
        /// </summary>
        /// <param name="userID"></param>
        private void InventoryResponse(InventoryCollection response)
        {
            UUID userID = response.UserID;

            if (m_RequestingInventory.ContainsKey(userID))
            {
                m_log.InfoFormat("[OGS1 INVENTORY SERVICE]: " +
                                 "Received inventory response for user {0} containing {1} folders and {2} items",
                                 userID, response.Folders.Count, response.Items.Count);

                InventoryFolderImpl      rootFolder = null;
                InventoryReceiptCallback callback   = m_RequestingInventory[userID];

                ICollection <InventoryFolderImpl> folders = new List <InventoryFolderImpl>();
                ICollection <InventoryItemBase>   items   = new List <InventoryItemBase>();

                foreach (InventoryFolderBase folder in response.Folders)
                {
                    if (folder.ParentID == UUID.Zero)
                    {
                        rootFolder = new InventoryFolderImpl(folder);
                        folders.Add(rootFolder);

                        break;
                    }
                }

                if (rootFolder != null)
                {
                    foreach (InventoryFolderBase folder in response.Folders)
                    {
                        if (folder.ID != rootFolder.ID)
                        {
                            folders.Add(new InventoryFolderImpl(folder));
                        }
                    }

                    foreach (InventoryItemBase item in response.Items)
                    {
                        items.Add(item);
                    }
                }
                else
                {
                    m_log.ErrorFormat("[OGS1 INVENTORY SERVICE]: Did not get back an inventory containing a root folder for user {0}", userID);
                }

                callback(folders, items);

                m_RequestingInventory.Remove(userID);
            }
            else
            {
                m_log.WarnFormat(
                    "[OGS1 INVENTORY SERVICE]: " +
                    "Received inventory response for {0} for which we do not have a record of requesting!",
                    userID);
            }
        }
Пример #7
0
        public void GetUserInventory(string id, UUID sessionID, InventoryReceiptCallback callback)
        {
            m_log.Debug("[HGInventory]: GetUserInventory " + id);
            string url    = string.Empty;
            string userID = string.Empty;

            if (StringToUrlAndUserID(id, out url, out userID))
            {
                ISessionAuthInventoryService connector = GetConnector(url);
                connector.GetUserInventory(userID, sessionID, callback);
            }
        }
Пример #8
0
 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
 {
     if (IsLocalGridUser(userID))
     {
         m_GridService.GetUserInventory(userID, callback);
     }
     else
     {
         UUID   sessionID = GetSessionID(userID);
         string uri       = GetUserInventoryURI(userID) + "/" + userID.ToString();
         m_HGService.GetUserInventory(uri, sessionID, callback);
     }
 }
Пример #9
0
        public override void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback)
        {
            m_log.InfoFormat("[LOCAL INVENTORY SERVICE]: Requesting inventory for user {0}", userID);

            List<InventoryFolderImpl> folders = new List<InventoryFolderImpl>();
            List<InventoryItemBase> items = new List<InventoryItemBase>();

            List<InventoryFolderBase> skeletonFolders = GetInventorySkeleton(userID);

            if (skeletonFolders != null)
            {
               
                InventoryFolderImpl rootFolder = null;

                // Need to retrieve the root folder on the first pass
                foreach (InventoryFolderBase folder in skeletonFolders)
                {
                    if (folder.ParentID == UUID.Zero)
                    {
                        rootFolder = new InventoryFolderImpl(folder);
                        folders.Add(rootFolder);
                        items.AddRange(RequestFolderItems(rootFolder.ID));
                        break; // Only 1 root folder per user
                    }
                }

                if (rootFolder != null)
                {
                    foreach (InventoryFolderBase folder in skeletonFolders)
                    {
                        if (folder.ID != rootFolder.ID)
                        {
                            folders.Add(new InventoryFolderImpl(folder));
                            items.AddRange(RequestFolderItems(folder.ID));
                        }
                    }
                }

                m_log.InfoFormat(
                    "[LOCAL INVENTORY SERVICE]: Received inventory response for user {0} containing {1} folders and {2} items",
                    userID, folders.Count, items.Count);
            }
            else
            {
                m_log.WarnFormat("[LOCAL INVENTORY SERVICE]: User {0} inventory not available", userID);
            }

            callback(folders, items);
        }
        /// <summary>
        /// Asynchronous inventory fetch.
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="callback"></param>
        public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
        {
            m_log.InfoFormat("[INVENTORY SERVICE]: Requesting inventory for user {0}", userID);

            List <InventoryFolderImpl> folders = new List <InventoryFolderImpl>();
            List <InventoryItemBase>   items   = new List <InventoryItemBase>();

            List <InventoryFolderBase> skeletonFolders = GetInventorySkeleton(userID);

            if (skeletonFolders != null)
            {
                InventoryFolderImpl rootFolder = null;

                // Need to retrieve the root folder on the first pass
                foreach (InventoryFolderBase folder in skeletonFolders)
                {
                    if (folder.ParentID == UUID.Zero)
                    {
                        rootFolder = new InventoryFolderImpl(folder);
                        folders.Add(rootFolder);
                        items.AddRange(GetFolderItems(userID, rootFolder.ID));
                        break; // Only 1 root folder per user
                    }
                }

                if (rootFolder != null)
                {
                    foreach (InventoryFolderBase folder in skeletonFolders)
                    {
                        if (folder.ID != rootFolder.ID)
                        {
                            folders.Add(new InventoryFolderImpl(folder));
                            items.AddRange(GetFolderItems(userID, folder.ID));
                        }
                    }
                }

                m_log.InfoFormat(
                    "[INVENTORY SERVICE]: Received inventory response for user {0} containing {1} folders and {2} items",
                    userID, folders.Count, items.Count);
            }
            else
            {
                m_log.WarnFormat("[INVENTORY SERVICE]: User {0} inventory not available", userID);
            }

            Util.FireAndForget(delegate { callback(folders, items); });
        }
Пример #11
0
        public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
        {
            UUID sessionID = GetSessionID(userID);

            try
            {
                m_RemoteConnector.GetUserInventory(userID.ToString(), sessionID, callback);
            }
            catch (Exception e)
            {
                if (StatsManager.SimExtraStats != null)
                {
                    StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure();
                }

                m_log.ErrorFormat("[INVENTORY CONNECTOR]: Request inventory operation failed, {0} {1}",
                                  e.Source, e.Message);
            }
        }
Пример #12
0
 public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
 {
     if (IsLocalGridUser(userID))
         m_GridService.GetUserInventory(userID, callback);
     else
     {
         UUID sessionID = GetSessionID(userID);
         string uri = GetUserInventoryURI(userID) + "/" + userID.ToString();
         m_HGService.GetUserInventory(uri, sessionID, callback);
     }
 }
Пример #13
0
 public override void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback)
 {
 }
 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
 {
     m_log.Error("[SIMIAN INVENTORY CONNECTOR]: Obsolete GetUserInventory called for " + userID);
     callback(new List <InventoryFolderImpl>(0), new List <InventoryItemBase>(0));
 }
Пример #15
0
 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
 {
 }
Пример #16
0
 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
 {
     m_InventoryService.GetUserInventory(userID, callback);
 }
 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
 {
     m_log.Error("[SIMIAN INVENTORY CONNECTOR]: Obsolete GetUserInventory called for " + userID);
     callback(new List<InventoryFolderImpl>(0), new List<InventoryItemBase>(0));
 }
 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
 {
     m_InventoryService.GetUserInventory(userID, callback);
 }
Пример #19
0
 public void GetUserInventory(UUID principalID, InventoryReceiptCallback callback)
 {
 }
        public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
        {
            UUID sessionID = GetSessionID(userID);
            try
            {
                m_RemoteConnector.GetUserInventory(userID.ToString(), sessionID, callback);
            }
            catch (Exception e)
            {
                if (StatsManager.SimExtraStats != null)
                    StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure();

                m_log.ErrorFormat("[INVENTORY CONNECTOR]: Request inventory operation failed, {0} {1}",
                    e.Source, e.Message);
            }

        }
Пример #21
0
 // See IInventoryServices
 public abstract void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback);
        public void GetUserInventory(string id, UUID sessionID, InventoryReceiptCallback callback)
        {
            m_log.Debug("[HGInventory]: GetUserInventory " + id);
            string url = string.Empty;
            string userID = string.Empty;

            if (StringToUrlAndUserID(id, out url, out userID))
            {
                ISessionAuthInventoryService connector = GetConnector(url);
                connector.GetUserInventory(userID, sessionID, callback);
            }

        }
 /// <summary>
 /// Request the inventory for a user.  This is an asynchronous operation that will call the callback when the
 /// inventory has been received
 /// </summary>
 /// <param name="userID"></param>
 /// <param name="callback"></param>
 public abstract void GetUserInventory(UUID userID, InventoryReceiptCallback callback);
Пример #24
0
 public override void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback)
 {
 }
Пример #25
0
 // See IInventoryServices
 public abstract void RequestInventoryForUser(UUID userID, InventoryReceiptCallback callback);
 /// <summary>
 /// Request the inventory for a user.  This is an asynchronous operation that will call the callback when the
 /// inventory has been received
 /// </summary>
 /// <param name="userID"></param>
 /// <param name="callback"></param>
 public abstract void GetUserInventory(UUID userID, InventoryReceiptCallback callback);
        /// <summary>
        /// Caller must catch eventual Exceptions.
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="sessionID"></param>
        /// <param name="callback"></param>
        public void GetUserInventory(string userIDStr, UUID sessionID, InventoryReceiptCallback callback)
        {
            UUID userID = UUID.Zero;
            if (UUID.TryParse(userIDStr, out userID))
            {
                lock (m_RequestingInventory)
                {
                    // *HACK ALERT*

                    // If an inventory request times out, it blocks any further requests from the 
                    // same user, even after a relog. This is bad, and makes me sad.

                    // Really, we should detect a timeout and report a failure to the callback,
                    // BUT in my testing i found that it's hard to detect a timeout.. sometimes,
                    // a partial response is recieved, and sometimes a null response.

                    // So, for now, add a timer of ten seconds (which is the request timeout).

                    // This should basically have the same effect.

                    lock (m_RequestTime)
                    {
                        if (m_RequestTime.ContainsKey(userID))
                        {
                            TimeSpan interval = DateTime.Now - m_RequestTime[userID];
                            if (interval.TotalSeconds > 10)
                            {
                                m_RequestTime.Remove(userID);
                                if (m_RequestingInventory.ContainsKey(userID))
                                {
                                    m_RequestingInventory.Remove(userID);
                                }
                            }
                        }
                        if (!m_RequestingInventory.ContainsKey(userID))
                        {
                            m_RequestTime.Add(userID, DateTime.Now);
                            m_RequestingInventory.Add(userID, callback);
                        }
                        else
                        {
                            m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetUserInventory - ignoring repeated request for user {0}", userID);
                            return;
                        }
                    }
                }

                m_log.InfoFormat(
                    "[INVENTORY CONNECTOR]: Requesting inventory from {0}/GetInventory/ for user {1}",
                    m_ServerURI, userID);

                RestSessionObjectPosterResponse<Guid, InventoryCollection> requester
                    = new RestSessionObjectPosterResponse<Guid, InventoryCollection>();
                requester.ResponseCallback = InventoryResponse;

                requester.BeginPostObject(m_ServerURI + "/GetInventory/", userID.Guid, sessionID.ToString(), userID.ToString());
            }
        }
Пример #28
0
 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
 {
 }
Пример #29
0
 public void GetUserInventory(UUID principalID, InventoryReceiptCallback callback)
 {
 }