/// <summary>
        /// This is the method that is invoked on an IPacketFactory to create an IPacket
        /// from the data in an IFieldReader given a specified PacketDefinition.
        /// </summary>
        /// <param name="definition">Definition of the fields expected in the next packet</param>
        /// <param name="reader">Data stream to be read</param>
        /// <returns>An IPacket corresponding to the PacketDefinition and the stream data</returns>
        public IPacket CreatePacket(PacketDefinition definition, IFieldReader reader)
        {
            IPacket packet;

            //what we create varies by what specific definition they're looking for
            if (definition.TypeName == m_MetricSamplePacketType)
            {
                //metrics can't be created directly - they're an abstract class.
                throw new ArgumentOutOfRangeException(nameof(definition), definition.TypeName, "Metric objects can't be created, only derived classes can.");
            }

            if (definition.TypeName == m_SampledMetricSamplePacketType)
            {
                //sampled metrics can't be created directly - they're an abstract class.
                throw new ArgumentOutOfRangeException(nameof(definition), definition.TypeName, "Sampled Metric objects can't be created, only derived classes can.");
            }

            if (definition.TypeName == m_EventMetricSamplePacketType)
            {
                packet = new EventMetricSamplePacket(m_Session);
            }
            else if (definition.TypeName == m_CustomSampledMetricSamplePacketType)
            {
                packet = new CustomSampledMetricSamplePacket(m_Session);
            }
            else
            {
                //crap, we don't know what to do here.
                throw new ArgumentOutOfRangeException(nameof(definition), definition.TypeName, "This packet factory doesn't understand how to create packets for the provided type.");
            }

            //this feels a little crazy, but you have to do your own read call here - we aren't just creating the packet
            //object, we actually have to make the standard call to have it read data...
            definition.ReadFields(packet, reader);

            return(packet);
        }
예제 #2
0
 /// <summary>
 /// Compare this custom sampled metric sample packet with another to determine if they are the same sample packet.
 /// </summary>
 /// <param name="other"></param>
 /// <returns></returns>
 public int CompareTo(CustomSampledMetricSamplePacket other)
 {
     //we really are just forwarding to the default comparitor; we are just casting types
     return(base.CompareTo(other));
 }
예제 #3
0
 /// <summary>
 /// Determines if the provided object is identical to this object.
 /// </summary>
 /// <param name="other">The object to compare this object to</param>
 /// <returns>True if the objects represent the same data.</returns>
 public bool Equals(CustomSampledMetricSamplePacket other)
 {
     //We're really just a type cast, refer to our base object
     return(base.Equals(other));
 }