//---------------------------------------------------------------------
        /// <summary>
        /// Writes trace information, a data object and event information to the listener specific output.
        /// </summary>
        ///
        /// <seealso cref="M:System.Diagnostics.TraceListener.TraceData(TraceEventCache,String,TraceEventType,Int32,Object)"/>
        /// ### <param name="eventCache">   A <see cref="T:System.Diagnostics.TraceEventCache" /> object  that contains the current process ID, thread ID, and stack trace information. </param>
        /// ### <param name="source">       A name used to identify the output, typically the name of the application that generated the trace event. </param>
        /// ### <param name="eventType">    One of the <see cref="T:System.Diagnostics.TraceEventType" /> values specifying the type of event that has caused the trace. </param>
        /// ### <param name="id">           A numeric identifier for the event. </param>
        /// ### <param name="data">         The trace data to emit. </param>
        //---------------------------------------------------------------------
        public override void TraceData(TraceEventCache eventCache, String source, TraceEventType eventType, Int32 id, Object data)
        {
            if (data is XmlLogEntry)
            {
                RITraceListenerData tData = new RITraceListenerData();
                tData.MessageType        = MessageType.SendXML;
                tData.Message            = (data as XmlLogEntry).Message;
                tData.Details            = (data as XmlLogEntry).Xml.InnerXml;
                tData.ExtendedProperties = (data as XmlLogEntry).ExtendedProperties;

                Listener.TraceData(eventCache, source, eventType, id, tData);
            }
            else if (data is LogEntry)
            {
                RITraceListenerData tData = new RITraceListenerData()
                {
                    Message = (data as LogEntry).Message
                };
                RITraceListener.PrepareListenerData(tData, eventType);
                tData.ExtendedProperties = (data as LogEntry).ExtendedProperties;

                Listener.TraceData(eventCache, source, eventType, id, tData);
            }
            else if (data is string)
            {
                Write(data as string);
            }
            else
            {
                base.TraceData(eventCache, source, eventType, id, data);
            }
        }
 //---------------------------------------------------------------------
 /// <summary>   Disposes the listener. </summary>
 //---------------------------------------------------------------------
 protected void DisposeListener()
 {
     lock (this)
     {
         if (FRITraceListener != null)
         {
             FRITraceListener.Dispose();
             FRITraceListener = null;
         }
     }
 }
 //---------------------------------------------------------------------
 /// <summary>   Initializes a new instance of the <see cref="RICustomTracer" /> class. </summary>
 /// <remarks>   The default name of 'RICustomTracer' will be used. </remarks>
 //---------------------------------------------------------------------
 public RICustomTracer()
 {
     FRITraceListener = null;
     Name             = "RICustomTracer";
 }
 //---------------------------------------------------------------------
 /// <summary>   Initializes a new instance of the <see cref="RICustomTracer" /> class. </summary>
 /// <remarks>   The default name of 'RICustomTracer' will be used. </remarks>
 //---------------------------------------------------------------------
 public RICustomTracer()
 {
     FRITraceListener = null;
     Name = "RICustomTracer";
 }
 //---------------------------------------------------------------------
 /// <summary>   Disposes the listener. </summary>
 //---------------------------------------------------------------------
 protected void DisposeListener()
 {
     lock (this)
     {
         if (FRITraceListener != null)
         {
             FRITraceListener.Dispose();
             FRITraceListener = null;
         }
     }
 }