static void client_OnMeasurementDelta(object sender, Delta d)
 {
     Console.WriteLine("{0}: {1:" + d.MetaData.Format + "} {2}", d.Path, d.Value, d.MetaData.Units);
 }
        /// <summary>
        /// Writes out all measurements in a given object recursively.
        /// </summary>
        /// <param name="target"></param>
        private void WriteOutMeasurements(object target, string path)
        {
            PropertyInfo[] infos;
            Measurement measurement;
            Group group;

            infos = target.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

            // For each propery on the target
            foreach (PropertyInfo info in infos)
            {
                if (null != (measurement = (Measurement)info.GetCustomAttribute(typeof(Measurement))))
                {
                    Delta d = new Delta();
                    d.Path = path + measurement.Name;
                    d.Value = info.GetValue(target);
                    d.Timestamp = (long)(DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds;
                    d.MetaData = measurement;

                    if (null != OnMeasurementDelta)
                    {
                        OnMeasurementDelta(this, d);
                    }
                }

                if (null != (group = (Group)info.GetCustomAttribute(typeof(Group))))
                {
                    WriteOutMeasurements(info.GetValue(target), path + group.Name + "/");
                }
            }
        }