corrade-vassal – Rev 16
?pathlinks?
using System;
using System.IO;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
namespace OpenMetaverse.TestClient
{
public class DownloadCommand : Command
{
UUID AssetID;
AssetType assetType;
AutoResetEvent DownloadHandle = new AutoResetEvent(false);
bool Success;
string usage = "Usage: download [uuid] [assetType]";
public DownloadCommand(TestClient testClient)
{
Name = "download";
Description = "Downloads the specified asset. Usage: download [uuid] [assetType]";
Category = CommandCategory.Inventory;
}
public override string Execute(string[] args, UUID fromAgentID)
{
if (args.Length != 2)
return usage;
Success = false;
AssetID = UUID.Zero;
assetType = AssetType.Unknown;
DownloadHandle.Reset();
if (!UUID.TryParse(args[0], out AssetID))
return usage;
try {
assetType = (AssetType)Enum.Parse(typeof(AssetType), args[1], true);
} catch (ArgumentException) {
return usage;
}
if (!Enum.IsDefined(typeof(AssetType), assetType))
return usage;
// Start the asset download
Client.Assets.RequestAsset(AssetID, assetType, true, Assets_OnAssetReceived);
if (DownloadHandle.WaitOne(120 * 1000, false))
{
if (Success)
return String.Format("Saved {0}.{1}", AssetID, assetType.ToString().ToLower());
else
return String.Format("Failed to download asset {0}, perhaps {1} is the incorrect asset type?",
AssetID, assetType);
}
else
{
return "Timed out waiting for texture download";
}
}
private void Assets_OnAssetReceived(AssetDownload transfer, Asset asset)
{
if (transfer.AssetID == AssetID)
{
if (transfer.Success)
{
try
{
File.WriteAllBytes(String.Format("{0}.{1}", AssetID,
assetType.ToString().ToLower()), asset.AssetData);
Success = true;
}
catch (Exception ex)
{
Logger.Log(ex.Message, Helpers.LogLevel.Error, ex);
}
}
DownloadHandle.Set();
}
}
}
}