| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | using System;using System.Net.Http.Headers;namespace Rssdp{    /// <summary>    /// Represents a discovered device, containing basic information about the device and the location of it's full device description document. Also provides convenience methods for retrieving the device description document.    /// </summary>    /// <seealso cref="SsdpDevice"/>    /// <seealso cref="Infrastructure.ISsdpDeviceLocator"/>    public sealed class DiscoveredSsdpDevice    {        private DateTimeOffset _AsAt;        /// <summary>        /// Sets or returns the type of notification, being either a uuid, device type, service type or upnp:rootdevice.        /// </summary>        public string NotificationType { get; set; }        /// <summary>        /// Sets or returns the universal service name (USN) of the device.        /// </summary>        public string Usn { get; set; }        /// <summary>        /// Sets or returns a URL pointing to the device description document for this device.        /// </summary>        public Uri DescriptionLocation { get; set; }        /// <summary>        /// Sets or returns the length of time this information is valid for (from the <see cref="AsAt"/> time).        /// </summary>        public TimeSpan CacheLifetime { get; set; }        /// <summary>        /// Sets or returns the date and time this information was received.        /// </summary>        public DateTimeOffset AsAt        {            get { return _AsAt; }            set            {                if (_AsAt != value)                {                    _AsAt = value;                }            }        }        /// <summary>        /// Returns the headers from the SSDP device response message.        /// </summary>        public HttpHeaders ResponseHeaders { get; set; }        /// <summary>        /// Returns true if this device information has expired, based on the current date/time, and the <see cref="CacheLifetime"/> & <see cref="AsAt"/> properties.        /// </summary>        /// <returns></returns>        public bool IsExpired()        {            return this.CacheLifetime == TimeSpan.Zero || this.AsAt.Add(this.CacheLifetime) <= DateTimeOffset.Now;        }        /// <summary>        /// Returns the device's <see cref="Usn"/> value.        /// </summary>        /// <returns>A string containing the device's universal service name.</returns>        public override string ToString()        {            return this.Usn;        }    }}
 |