OpenMetaverse.AssetManager.RequestMesh C# (CSharp) Method

RequestMesh() public method

Requests download of a mesh asset
public RequestMesh ( UUID meshID, MeshDownloadCallback callback ) : void
meshID UUID UUID of the mesh asset
callback MeshDownloadCallback Callback when the request completes
return void
        public void RequestMesh(UUID meshID, MeshDownloadCallback callback)
        {
            if (meshID == UUID.Zero || callback == null)
                return;

            if (Client.Network.CurrentSim.Caps != null &&
                Client.Network.CurrentSim.Caps.CapabilityURI("GetMesh") != null)
            {
                // Do we have this mesh asset in the cache?
                if (Client.Assets.Cache.HasAsset(meshID))
                {
                    callback(true, new AssetMesh(meshID, Client.Assets.Cache.GetCachedAssetBytes(meshID)));
                    return;
                }

                Uri url = Client.Network.CurrentSim.Caps.CapabilityURI("GetMesh");

                DownloadRequest req = new DownloadRequest(
                    new Uri(string.Format("{0}/?mesh_id={1}", url.ToString(), meshID.ToString())),
                    Client.Settings.CAPS_TIMEOUT,
                    null,
                    null,
                    (HttpWebRequest request, HttpWebResponse response, byte[] responseData, Exception error) =>
                    {
                        if (error == null && responseData != null) // success
                        {
                            callback(true, new AssetMesh(meshID, responseData));
                            Client.Assets.Cache.SaveAssetToCache(meshID, responseData);
                        }
                        else // download failed
                        {
                            Logger.Log(
                                string.Format("Failed to fetch mesh asset {0}: {1}",
                                    meshID,
                                    (error == null) ? "" : error.Message
                                ),
                                Helpers.LogLevel.Warning, Client);
                        }
                    }
                );

                HttpDownloads.QueueDownlad(req);
            }
            else
            {
                Logger.Log("GetMesh capability not available", Helpers.LogLevel.Error, Client);
                callback(false, null);
            }
        }