Implement some fairly harsh locking to stop multiple logging calls to logpacket TestClient command from stepping on each other.

This commit is contained in:
Justin Clark-Casey
2014-06-19 23:23:16 +01:00
parent b02cbbcbd8
commit b4fbaa601c

View File

@@ -34,22 +34,25 @@ namespace OpenMetaverse.TestClient
return string.Format(
"{0} is not a valid number of packets for {1}", rawNumberOfPackets, m_client.Self.Name);
if (m_isLogging)
return string.Format(
"Still waiting to finish logging {0} packets for {1}",
m_packetsToLogRemaining, m_client.Self.Name);
try
lock (this)
{
lock (this)
if (m_isLogging)
return string.Format(
"Still waiting to finish logging {0} packets for {1}",
m_packetsToLogRemaining, m_client.Self.Name);
try
{
m_logStreamWriter = new StreamWriter(path);
}
catch (Exception e)
{
return string.Format("Could not open file with path [{0}], exception {1}", path, e);
}
catch (Exception e)
{
return string.Format("Could not open file with path [{0}], exception {1}", path, e);
}
m_isLogging = true;
}
m_isLogging = true;
m_packetsToLogRemaining = numberOfPackets;
m_client.Network.RegisterCallback(PacketType.Default, HandlePacket);
return string.Format("Now logging {0} packets for {1}", m_packetsToLogRemaining, m_client.Self.Name);
@@ -68,15 +71,29 @@ namespace OpenMetaverse.TestClient
// Console.WriteLine(
// "Received packet {0} from {1} for {2}", args.Packet.Type, args.Simulator.Name, m_client.Self.Name);
m_logStreamWriter.WriteLine("Received at {0}", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss.fff"));
m_logStreamWriter.WriteLine(PacketDecoder.PacketToString(args.Packet));
if (--m_packetsToLogRemaining <= 0)
lock (this)
{
m_client.Network.UnregisterCallback(PacketType.Default, HandlePacket);
m_logStreamWriter.Close();
Console.WriteLine("Finished logging packets for {0}", m_client.Self.Name);
m_isLogging = false;
if (!m_isLogging)
return;
m_logStreamWriter.WriteLine("Received: {0}", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss.fff"));
try
{
m_logStreamWriter.WriteLine(PacketDecoder.PacketToString(args.Packet));
}
catch (Exception e)
{
m_logStreamWriter.WriteLine("Failed to write decode of {0}, exception {1}", args.Packet.Type, e);
}
if (--m_packetsToLogRemaining <= 0)
{
m_client.Network.UnregisterCallback(PacketType.Default, HandlePacket);
m_logStreamWriter.Close();
Console.WriteLine("Finished logging packets for {0}", m_client.Self.Name);
m_isLogging = false;
}
}
}
}