Files
libremetaverse/libsecondlife-cs/examples/TestClient/Commands/ExportCommand.cs
John Hurliman baae5a17ed * Updated the message_template.msg to 1.13.1.4
* Moved MainAvatar delegates and enums in to the MainAvatar.cs file
* TestClient now stores prims in per-sim dictionaries
* TestClient throttles the connection at login
* OnTeleport callback passes a reference to the current Simulator
* Removed unneeded typecasts to Packet
* AutoPilotLocal() doesn't need the GridRegionData reference
* Disconnects and packets resent multiple times are handled better
* OnNewAvatar is fired for our own avatar as well, and our avatar position is updated all the time now, as well as confirming it's our avatar by UUID instead of name

git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@721 52acb1d6-8a22-11de-b505-999d5b087335
2006-12-13 21:15:49 +00:00

106 lines
3.5 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using libsecondlife;
using libsecondlife.Packets;
namespace libsecondlife.TestClient
{
public class ExportCommand : Command
{
public ExportCommand()
{
Name = "export";
Description = "Exports an object to an xml file. Usage: export uuid outputfile.xml";
}
public override string Execute(SecondLife Client, string[] args, LLUUID fromAgentID)
{
if (args.Length != 2)
return "Usage: export uuid outputfile.xml";
LLUUID id;
uint localid = 0;
int count = 0;
string file = args[1];
try
{
id = new LLUUID(args[0]);
}
catch (Exception)
{
return "Usage: export uuid outputfile.xml";
}
lock (TestClient.SimPrims)
{
if (TestClient.SimPrims.ContainsKey(Client.Network.CurrentSim))
{
foreach (PrimObject prim in TestClient.SimPrims[Client.Network.CurrentSim].Values)
{
if (prim.ID == id)
{
if (prim.ParentID != 0)
{
localid = prim.ParentID;
}
else
{
localid = prim.LocalID;
}
break;
}
}
}
}
if (localid != 0)
{
try
{
XmlWriter writer = XmlWriter.Create(file);
List<PrimObject> prims = new List<PrimObject>();
lock (TestClient.SimPrims)
{
if (TestClient.SimPrims.ContainsKey(Client.Network.CurrentSim))
{
foreach (PrimObject prim in TestClient.SimPrims[Client.Network.CurrentSim].Values)
{
if (prim.LocalID == localid || prim.ParentID == localid)
{
prims.Add(prim);
count++;
}
}
}
}
//Serialize it!
Helpers.PrimListToXml(prims, writer);
writer.Close();
}
catch (Exception e)
{
string ret = "Failed to write to " + file + ":" + e.ToString();
if (ret.Length > 1000)
{
ret = ret.Remove(1000);
}
return ret;
}
return "Exported " + count + " prims to " + file;
}
else
{
return "Couldn't find UUID " + id.ToString() + " in the " +
TestClient.SimPrims[Client.Network.CurrentSim].Count +
"objects currently indexed in the current simulator";
}
}
}
}