corrade-vassal – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 vero 1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Text;
5 using System.Threading;
6 using OpenMetaverse;
7 using OpenMetaverse.StructuredData;
8  
9 namespace OpenMetaverse.TestClient
10 {
11 public class XferCommand : Command
12 {
13 const int FETCH_ASSET_TIMEOUT = 1000 * 10;
14  
15 public XferCommand(TestClient testClient)
16 {
17 Name = "xfer";
18 Description = "Downloads the specified asset using the Xfer system. Usage: xfer [uuid]";
19 }
20  
21 public override string Execute(string[] args, UUID fromAgentID)
22 {
23 UUID assetID;
24  
25 if (args.Length != 1 || !UUID.TryParse(args[0], out assetID))
26 return "Usage: xfer [uuid]";
27  
28 string filename;
29 byte[] assetData = RequestXfer(assetID, AssetType.Object, out filename);
30  
31 if (assetData != null)
32 {
33 try
34 {
35 File.WriteAllBytes(filename, assetData);
36 return "Saved asset " + filename;
37 }
38 catch (Exception ex)
39 {
40 return "Failed to save asset " + filename + ": " + ex.Message;
41 }
42 }
43 else
44 {
45 return "Failed to xfer asset " + assetID;
46 }
47 }
48  
49 byte[] RequestXfer(UUID assetID, AssetType type, out string filename)
50 {
51 AutoResetEvent xferEvent = new AutoResetEvent(false);
52 ulong xferID = 0;
53 byte[] data = null;
54  
55 EventHandler<XferReceivedEventArgs> xferCallback =
56 delegate(object sender, XferReceivedEventArgs e)
57 {
58 if (e.Xfer.XferID == xferID)
59 {
60 if (e.Xfer.Success)
61 data = e.Xfer.AssetData;
62 xferEvent.Set();
63 }
64 };
65  
66 Client.Assets.XferReceived += xferCallback;
67  
68 filename = assetID + ".asset";
69 xferID = Client.Assets.RequestAssetXfer(filename, false, true, assetID, type, false);
70  
71 xferEvent.WaitOne(FETCH_ASSET_TIMEOUT, false);
72  
73 Client.Assets.XferReceived -= xferCallback;
74  
75 return data;
76 }
77 }
78 }