当前位置: 首页>>代码示例>>C#>>正文


C# IClientAPI.SendTaskInventory方法代码示例

本文整理汇总了C#中IClientAPI.SendTaskInventory方法的典型用法代码示例。如果您正苦于以下问题:C# IClientAPI.SendTaskInventory方法的具体用法?C# IClientAPI.SendTaskInventory怎么用?C# IClientAPI.SendTaskInventory使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IClientAPI的用法示例。


在下文中一共展示了IClientAPI.SendTaskInventory方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: RequestInventoryFile

        /// <summary>
        /// Serialize all the metadata for the items in this prim's inventory ready for sending to the client
        /// </summary>
        /// <param name="xferManager"></param>
        public void RequestInventoryFile(IClientAPI client)
        {
            IXfer xferManager = client.Scene.RequestModuleInterface<IXfer> ();
            if (m_inventorySerial == 0)
            {
                //No inventory, no sending
                client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
                return;
            }
            //If update == true, we need to recreate the file for the client
            bool Update = GetInventoryFileName();

            client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial,
                                     Utils.StringToBytes(m_inventoryFileName));

            if (!Update)
            {
                //We don't need to update the fileData, so just send the cached info and exit out of this method
                if (m_fileData.Length > 2)
                {
                    xferManager.AddNewFile(m_inventoryFileName, m_fileData);
                }
                return;
            }

            // Confusingly, the folder item has to be the object id, while the 'parent id' has to be zero.  This matches
            // what appears to happen in the Second Life protocol.  If this isn't the case. then various functionality
            // isn't available (such as drag from prim inventory to agent inventory)
            InventoryStringBuilder invString = new InventoryStringBuilder(m_part.UUID, UUID.Zero);

            bool includeAssets = false;
            if (m_part.ParentGroup.Scene.Permissions.CanEditObjectInventory(m_part.UUID, client.AgentId))
                includeAssets = true;

            List<TaskInventoryItem> items = (List<TaskInventoryItem>)m_items.Clone2List();
            lock (items)
            {
                foreach (TaskInventoryItem item in items)
                {
                    UUID ownerID = item.OwnerID;
                    uint everyoneMask = 0;
                    uint baseMask = item.BasePermissions;
                    uint ownerMask = item.CurrentPermissions;
                    uint groupMask = item.GroupPermissions;

                    invString.AddItemStart();
                    invString.AddNameValueLine("item_id", item.ItemID.ToString());
                    invString.AddNameValueLine("parent_id", m_part.UUID.ToString());

                    invString.AddPermissionsStart();

                    invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask));
                    invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask));
                    invString.AddNameValueLine("group_mask", Utils.UIntToHexString(groupMask));
                    invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask));
                    invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));

                    invString.AddNameValueLine("creator_id", item.CreatorID.ToString());
                    invString.AddNameValueLine("owner_id", ownerID.ToString());

                    invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString());

                    invString.AddNameValueLine("group_id", item.GroupID.ToString());
                    invString.AddSectionEnd();

                    if (includeAssets)
                        invString.AddNameValueLine("asset_id", item.AssetID.ToString());
                    else
                        invString.AddNameValueLine("asset_id", UUID.Zero.ToString());
                    invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]);
                    invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]);
                    invString.AddNameValueLine("flags", Utils.UIntToHexString(item.Flags));

                    invString.AddSaleStart();
                    invString.AddNameValueLine("sale_type", TaskInventoryItem.SaleTypes[item.SaleType]);
                    invString.AddNameValueLine("sale_price", item.SalePrice.ToString());
                    invString.AddSectionEnd();

                    invString.AddNameValueLine("name", item.Name + "|");
                    invString.AddNameValueLine("desc", item.Description + "|");

                    invString.AddNameValueLine("creation_date", item.CreationDate.ToString());
                    invString.AddSectionEnd();
                }
            }
            m_fileData = Utils.StringToBytes(invString.BuildString.ToString());

            //m_log.Debug(Utils.BytesToString(fileData));
            //m_log.Debug("[PRIM INVENTORY]: RequestInventoryFile fileData: " + Utils.BytesToString(fileData));

            if (m_fileData.Length > 2)
            {
                xferManager.AddNewFile(m_inventoryFileName, m_fileData);
            }
        }
开发者ID:kow,项目名称:Aurora-Sim,代码行数:99,代码来源:SceneObjectPartInventory.cs

示例2: GetInventoryFileName

        /// <summary>
        /// Return the name with which a client can request a xfer of this prim's inventory metadata
        /// </summary>
        /// <param name="client"></param>
        /// <param name="localID"></param>
        public bool GetInventoryFileName(IClientAPI client, uint localID)
        {
//            m_log.DebugFormat(
//                 "[PRIM INVENTORY]: Received request from client {0} for inventory file name of {1}, {2}",
//                 client.AgentId, Name, UUID);

            if (m_inventorySerial > 0)
            {
                client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial,
                                         Utils.StringToBytes(GetInventoryFileName()));
                return true;
            }
            else
            {
                client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
                return false;
            }
        }
开发者ID:ChrisD,项目名称:opensim,代码行数:23,代码来源:SceneObjectPartInventory.cs

示例3: RequestInventoryFile

        /// <summary>
        /// Serialize all the metadata for the items in this prim's inventory ready for sending to the client
        /// </summary>
        /// <param name="xferManager"></param>
        public void RequestInventoryFile(IClientAPI client, IXfer xferManager)
        {
            byte[] fileData = new byte[0];

            if (m_inventorySerial <= 0) // no inventory to send
            {
                client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
                return;   // client notified above
            }

            // Confusingly, the folder item has to be the object id, while the 'parent id' has to be zero.  This matches
            // what appears to happen in the Second Life protocol.  If this isn't the case. then various functionality
            // isn't available (such as drag from prim inventory to agent inventory)
            InventoryStringBuilder invString = new InventoryStringBuilder(m_part.UUID, UUID.Zero);

            lock (m_items)
            {
//                int items = 0;
                foreach (TaskInventoryItem item in m_items.Values)
                {
                    UUID ownerID = item.OwnerID;
                    uint everyoneMask = 0;
                    uint baseMask = item.BasePermissions;
                    uint ownerMask = item.CurrentPermissions;
                    uint groupMask = item.GroupPermissions;
                    string itemID;
                    string desc;
                    
                    // only the owner of the item can see the UUIDs of Contents and possibly private data
                    if (ownerID == client.AgentId)
                    {
                        itemID = item.AssetID.ToString();
                        desc = item.Description;
//                        m_log.DebugFormat("[ASSETS]: RequestInventoryFile returning item #{0} itemID {1} asset {2}", ++items, item.ItemID, item.AssetID);
                    }
                    else
                    {
                        itemID = UUID.Zero.ToString();
                        desc = "(not owner)";
                    }

                    invString.AddSectionEnd();

                    invString.AddItemStart();
                    invString.AddNameValueLine("item_id", item.ItemID.ToString());
                    invString.AddNameValueLine("parent_id", m_part.UUID.ToString());

                    invString.AddPermissionsStart();

                    invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask));
                    invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask));
                    invString.AddNameValueLine("group_mask", Utils.UIntToHexString(groupMask));
                    invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask));
                    invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));

                    invString.AddNameValueLine("creator_id", item.CreatorID.ToString());
                    invString.AddNameValueLine("owner_id", ownerID.ToString());

                    invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString());

                    invString.AddNameValueLine("group_id", item.GroupID.ToString());
                    invString.AddSectionEnd();

                    invString.AddNameValueLine("asset_id", itemID);
                    invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]);
                    invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]);
                    invString.AddNameValueLine("flags", Utils.UIntToHexString(item.Flags));

                    invString.AddSaleStart();
                    invString.AddNameValueLine("sale_type", "not");
                    invString.AddNameValueLine("sale_price", "0");
                    invString.AddSectionEnd();

                    invString.AddNameValueLine("name", item.Name + "|");
                    invString.AddNameValueLine("desc", desc + "|");

                    invString.AddNameValueLine("creation_date", item.CreationDate.ToString());
                    invString.AddSectionEnd();
                }
            }
            invString.AddEnd();

            fileData = Utils.StringToBytes(invString.BuildString.ToString());
            if (fileData.Length > 2)
            {
                // There is inventory to send. Allocate temp file.
                UpdateInventoryTempFileName(xferManager);
                // Add the data to the NewFiles list and await the viewer request for it.
                xferManager.AddNewFile(m_inventoryFileName, fileData);
                // Notify the viewer of the available file download.
                client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial, Utils.StringToBytes(m_inventoryFileName));
            }
        }
开发者ID:MatthewBeardmore,项目名称:halcyon,代码行数:97,代码来源:SceneObjectPartInventory.cs

示例4: RequestInventoryFile

        /// <summary>
        /// Serialize all the metadata for the items in this prim's inventory ready for sending to the client
        /// </summary>
        /// <param name="xferManager"></param>
        public void RequestInventoryFile(IClientAPI client, IXfer xferManager)
        {
            CreateInventoryFile();

            if (m_inventorySerial == 0) // No inventory
            {
                client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
                return;
            }

            // In principle, we should only do the rest if the inventory changed;
            // by sending m_inventorySerial to the client, it ought to know
            // that nothing changed and that it doesn't need to request the file. 
            // Unfortunately, it doesn't look like the client optimizes this; 
            // the client seems to always come back and request the Xfer, 
            // no matter what value m_inventorySerial has.

            if (m_inventoryFileData.Length > 2)
                // Add the file for Xfer
                xferManager.AddNewFile(m_inventoryFileName, m_inventoryFileData);

            // Tell the client we're ready to Xfer the file
            client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial,
                    Util.StringToBytes256(m_inventoryFileName));
        }
开发者ID:BackupTheBerlios,项目名称:seleon,代码行数:29,代码来源:SceneObjectPartInventory.cs

示例5: RequestInventoryFile

        /// <summary>
        /// Serialize all the metadata for the items in this prim's inventory ready for sending to the client
        /// </summary>
        /// <param name="xferManager"></param>
        public void RequestInventoryFile(IClientAPI client, IXfer xferManager)
        {
            lock (m_items)
            {
                // Don't send a inventory xfer name if there are no items.  Doing so causes viewer 3 to crash when rezzing
                // a new script if any previous deletion has left the prim inventory empty.
                if (m_items.Count == 0) // No inventory
                {
//                    m_log.DebugFormat(
//                        "[PRIM INVENTORY]: Not sending inventory data for part {0} {1} {2} for {3} since no items",
//                        m_part.Name, m_part.LocalId, m_part.UUID, client.Name);

                    client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
                    return;
                }

                CreateInventoryFile();
    
                // In principle, we should only do the rest if the inventory changed;
                // by sending m_inventorySerial to the client, it ought to know
                // that nothing changed and that it doesn't need to request the file. 
                // Unfortunately, it doesn't look like the client optimizes this; 
                // the client seems to always come back and request the Xfer, 
                // no matter what value m_inventorySerial has.
                // FIXME: Could probably be > 0 here rather than > 2
                if (m_inventoryFileData.Length > 2)
                {
                    // Add the file for Xfer
    //                m_log.DebugFormat(
    //                    "[PRIM INVENTORY]: Adding inventory file {0} (length {1}) for transfer on {2} {3} {4}",
    //                    m_inventoryFileName, m_inventoryFileData.Length, m_part.Name, m_part.UUID, m_part.LocalId);
                    
                    xferManager.AddNewFile(m_inventoryFileName, m_inventoryFileData);
                }
    
                // Tell the client we're ready to Xfer the file
                client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial,
                        Util.StringToBytes256(m_inventoryFileName));
            }
        }
开发者ID:CCIR,项目名称:opensim,代码行数:44,代码来源:SceneObjectPartInventory.cs

示例6: RequestInventoryFile

        /// <summary>
        /// Serialize all the metadata for the items in this prim's inventory ready for sending to the client
        /// </summary>
        /// <param name="xferManager"></param>
        public void RequestInventoryFile(IClientAPI client, IXfer xferManager)
        {
            lock (m_inventoryFileLock)
            {
                string filename = "inventory_" + UUID.Random().ToString() + ".tmp";

                bool changed = false;
                if (m_inventoryFileNameSerial < m_inventorySerial)
                {
                    m_inventoryFileNameSerial = m_inventorySerial;
                    changed = true;
                }

                if (m_inventoryFileData.Length < 2)
                    changed = true;

                bool includeAssets = false;
                if (m_part.ParentGroup.Scene.Permissions.CanEditObjectInventory(m_part.UUID, client.AgentId))
                    includeAssets = true;

                if (m_inventoryPrivileged != includeAssets)
                    changed = true;

                Items.LockItemsForRead(true);

                if (m_inventorySerial == 0) // No inventory
                {
                    Items.LockItemsForRead(false);
                    client.SendTaskInventory(m_part.UUID, 0, new byte[0]);

                    return;
                }

                if (m_items.Count == 0) // No inventory
                {
                    Items.LockItemsForRead(false);
                    client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
                    return;
                }

                if (!changed)
                {
                    Items.LockItemsForRead(false);

                    xferManager.AddNewFile(filename,
                            m_inventoryFileData);
                    client.SendTaskInventory(m_part.UUID, (short)m_inventoryFileNameSerial,
                            Util.StringToBytes256(filename));

                    return;
                }

                m_inventoryPrivileged = includeAssets;

                InventoryStringBuilder invString = new InventoryStringBuilder(m_part.UUID, UUID.Zero);

                foreach (TaskInventoryItem item in m_items.Values)
                {
                    UUID ownerID = item.OwnerID;
                    uint everyoneMask = 0;
                    uint baseMask = item.BasePermissions;
                    uint ownerMask = item.CurrentPermissions;
                    uint groupMask = item.GroupPermissions;

                    invString.AddItemStart();
                    invString.AddNameValueLine("item_id", item.ItemID.ToString());
                    invString.AddNameValueLine("parent_id", m_part.UUID.ToString());

                    invString.AddPermissionsStart();

                    invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask));
                    invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask));
                    invString.AddNameValueLine("group_mask", Utils.UIntToHexString(groupMask));
                    invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask));
                    invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));

                    invString.AddNameValueLine("creator_id", item.CreatorID.ToString());
                    invString.AddNameValueLine("owner_id", ownerID.ToString());

                    invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString());

                    invString.AddNameValueLine("group_id", item.GroupID.ToString());
                    invString.AddSectionEnd();

                    if (includeAssets)
                        invString.AddNameValueLine("asset_id", item.AssetID.ToString());
                    else
                        invString.AddNameValueLine("asset_id", UUID.Zero.ToString());
                    invString.AddNameValueLine("type", Utils.AssetTypeToString((AssetType)item.Type));
                    invString.AddNameValueLine("inv_type", Utils.InventoryTypeToString((InventoryType)item.InvType));
                    invString.AddNameValueLine("flags", Utils.UIntToHexString(item.Flags));

                    invString.AddSaleStart();
                    invString.AddNameValueLine("sale_type", "not");
                    invString.AddNameValueLine("sale_price", "0");
                    invString.AddSectionEnd();
//.........这里部分代码省略.........
开发者ID:CassieEllen,项目名称:opensim,代码行数:101,代码来源:SceneObjectPartInventory.cs


注:本文中的IClientAPI.SendTaskInventory方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。