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);
}
}