Files
libremetaverse/libsecondlife-cs/examples/TestClient/Commands/PacketLogCommand.cs

81 lines
2.2 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Xml;
using libsecondlife;
using libsecondlife.Packets;
namespace libsecondlife.TestClient
{
public class PacketLogCommand : Command
{
XmlWriter Writer;
bool Done = false;
int Count = 0;
int Total = 0;
public PacketLogCommand()
{
Name = "packetlog";
Description = "Logs a given number of packets to an xml file. Usage: packetlog 10 tenpackets.xml";
}
public override string Execute(SecondLife Client, string[] args, LLUUID fromAgentID)
{
if (args.Length != 2)
return "Usage: packetlog 10 tenpackets.xml";
Done = false;
Count = 0;
NetworkManager.PacketCallback callback = new NetworkManager.PacketCallback(OnPacket);
try
{
Total = Int32.Parse(args[0]);
Writer = XmlWriter.Create(args[1]);
Writer.WriteStartElement("packets");
Client.Network.RegisterCallback(PacketType.Default, callback);
}
catch (Exception e)
{
return "Usage: packetlog 10 tenpackets.xml" + Environment.NewLine + e;
}
while (!Done)
{
System.Threading.Thread.Sleep(100);
}
Client.Network.UnregisterCallback(PacketType.Default, callback);
lock (Writer)
{
Writer.WriteEndElement();
Writer.Close();
}
return "Exported " + Count + " packets to " + args[1];
}
private void OnPacket(Packet packet, Simulator simulator)
{
lock (Writer)
{
if (Writer.WriteState == WriteState.Error)
{
Done = true;
}
else if (Count >= Total)
{
Done = true;
}
else
{
packet.ToXml(Writer);
Count++;
}
}
}
}
}