예제 #1
0
        /// <summary>
        /// Ask server for details of cost and impact of the mesh upload
        /// </summary>
        /// <param name="callback">Callback that will be invoke upon completion of the upload. Null is sent on request failure</param>
        public void PrepareUpload(ModelUploadCallback callback)
        {
            CapsClient request = null;

            if (Client.Network.CurrentSim == null ||
                Client.Network.CurrentSim.Caps == null ||
                (request = Client.Network.CurrentSim.Caps.CreateCapsClient("NewFileAgentInventory")) == null)
            {
                Logger.Log("Cannot upload mesh, no connection or NewFileAgentInventory not available", Helpers.LogLevel.Warning);
                callback?.Invoke(null);
                return;
            }

            Images   = new List <byte[]>();
            ImgIndex = new Dictionary <string, int>();

            OSDMap req = new OSDMap
            {
                ["name"]              = InvName,
                ["description"]       = InvDescription,
                ["asset_resources"]   = AssetResources(false),
                ["asset_type"]        = "mesh",
                ["inventory_type"]    = "object",
                ["folder_id"]         = Client.Inventory.FindFolderForType(AssetType.Object),
                ["texture_folder_id"] = Client.Inventory.FindFolderForType(AssetType.Texture),
                ["everyone_mask"]     = (int)PermissionMask.All,
                ["group_mask"]        = (int)PermissionMask.All,
                ["next_owner_mask"]   = (int)PermissionMask.All
            };

            request.OnComplete += (client, result, error) =>
            {
                if (error != null || result == null || result.Type != OSDType.Map)
                {
                    Logger.Log("Mesh upload request failure", Helpers.LogLevel.Error);
                    callback?.Invoke(null);
                    return;
                }
                OSDMap res = (OSDMap)result;

                if (res["state"] != "upload")
                {
                    Logger.Log("Mesh upload failure: " + res["message"], Helpers.LogLevel.Error);
                    callback?.Invoke(null);
                    return;
                }

                Logger.Log("Response from mesh upload prepare:" + Environment.NewLine + OSDParser.SerializeLLSDNotationFormatted(result), Helpers.LogLevel.Debug);
                callback?.Invoke(result);
            };

            request.PostRequestAsync(req, OSDFormat.Xml, 3 * 60 * 1000);
        }
예제 #2
0
        /// <summary>
        /// Performas actual mesh and image upload
        /// </summary>
        /// <param name="uploader">Uri recieved in the upload prepare stage</param>
        /// <param name="callback">Callback that will be invoke upon completion of the upload. Null is sent on request failure</param>
        public void PerformUpload(Uri uploader, ModelUploadCallback callback)
        {
            CapsClient request = new CapsClient(uploader, "MeshUploader");

            request.OnComplete += (client, result, error) =>
            {
                if (error != null || result == null || result.Type != OSDType.Map)
                {
                    Logger.Log("Mesh upload request failure", Helpers.LogLevel.Error);
                    callback?.Invoke(null);
                    return;
                }
                OSDMap res = (OSDMap)result;
                Logger.Log("Response from mesh upload perform:\n" + OSDParser.SerializeLLSDNotationFormatted(result), Helpers.LogLevel.Debug);
                callback?.Invoke(res);
            };

            request.BeginGetResponse(AssetResources(true), OSDFormat.Xml, 60 * 1000);
        }