using System;
using System.Diagnostics;
using System.Text;
using System.Net.Sockets;
using System.Reflection;
using System.Xml;
using System.Collections;
namespace Trace
{
///
/// TraceListener is a specialized TraceListener that sends the output
/// of Debug.Write or Debug.WriteLine to a server using
/// UDP/IP. This class is intended to be used with the TraceViewer VS.Net Add-In.
///
public class TraceListener : System.Diagnostics.TraceListener, IDisposable
{
private TcpClient client = null;
[Conditional("DEBUG")]
///
/// Call this method to hook to the Debug infrastructure a
/// TraceListener that sends its output to the specified server
/// and port
///
/// The IP address or name of the server
/// The port number the server is listening to
///
///
///
///
///
///
public static void InstallTcpTraceListener(string server, int port)
{
Debug.Listeners.Add(new TraceListener(server, port));
}
///
/// Constructor that takes a server IP address and port
///
/// The server address or name
/// The server port number
public TraceListener(string server, int port)
{
client = new TcpClient(server, port);
}
public override void Write(string message)
{
SendString(message);
}
public override void WriteLine(string message)
{
SendString(message);
}
public override void Close()
{
client.Close();
base.Close ();
}
public void Dispose()
{
this.Close();
}
private void SendString(string message)
{
NetworkStream stream = client.GetStream();
Byte[] data = System.Text.Encoding.Unicode.GetBytes(message);
stream.Write(data, 0, data.Length);
}
}
}